#region Windows服务控制
/// <summary>
/// 安装服务
/// </summary>
/// <param name="stateSaver"></param>
/// <param name="filepath"></param>
private void InstallService(IDictionary stateSaver, string filepath)
{
try
{
ServiceController service = new ServiceController("WCFService");
if (!ServiceIsExisted("WCFService"))
{
//Install Service
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true;
myAssemblyInstaller.Path = filepath;
myAssemblyInstaller.Install(stateSaver);
myAssemblyInstaller.Commit(stateSaver);
myAssemblyInstaller.Dispose();
//--Start Service
service.Start();
}
else
{
if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
{
service.Start();
}
}
}
catch (Exception ex)
{
MessageBox.Show("安装服务失败!");
}
}
/// <summary>
/// 卸载windows服务
/// </summary>
/// <param name="filepath"></param>
private void UnInstallService(string filepath)
{
try
{
if (ServiceIsExisted("WCFService"))
{
//UnInstall Service
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true;
myAssemblyInstaller.Path = filepath;
myAssemblyInstaller.Uninstall(null);
myAssemblyInstaller.Dispose();
}
}
catch (Exception ex)
{
MessageBox.Show("卸载服务失败!");
}
}
/// <summary>
/// 判断window服务是否存在
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
private bool ServiceIsExisted(string serviceName)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName == serviceName)
{
return true;
}
}
return false;
}
/// <summary>
/// 判断window服务是否启动
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
public static bool IsServiceStart(string serviceName)
{
ServiceController psc = new ServiceController(serviceName);
bool bStartStatus = false;
try
{
if (!psc.Status.Equals(ServiceControllerStatus.Stopped))
{
bStartStatus = true;
}
return bStartStatus;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 启动服务
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
private bool StartService(string serviceName)
{
bool flag = true;
if (ServiceIsExisted(serviceName))
{
System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
{
service.Start();
for (int i = 0; i < 60; i++)
{
service.Refresh();
System.Threading.Thread.Sleep(1000);
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
break;
}
if (i == 59)
{
flag = false;
}
}
}
}
return flag;
}
/// <summary>
/// 停止服务
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
private bool StopService(string serviceName)
{
bool flag = true;
if (ServiceIsExisted(serviceName))
{
System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
service.Stop();
for (int i = 0; i < 60; i++)
{
service.Refresh();
System.Threading.Thread.Sleep(1000);
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
break;
}
if (i == 59)
{
flag = false;
}
}
}
}
return flag;
}
/// <summary>
/// 获取服务启动类型
/// </summary>
/// <param name="serviceName"></param>
/// <returns>2:自动 3:手动 4:禁用 0:获取失败</returns>
public string GetServiceStartMode(string serviceName)
{
string ServiceRunningState = string.Empty;
int Mode = 0;
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\" + serviceName);
Mode = Convert.ToInt32(key.GetValue("Start"));
switch (Mode)
{
case 0:
ServiceRunningState = "获取失败";
break;
case 2:
ServiceRunningState = "自动";
break;
case 3:
ServiceRunningState = "手动";
break;
case 4:
ServiceRunningState = "禁用";
break;
}
key.Close();
}
catch (Exception)
{
return ServiceRunningState = "获取失败";
}
return ServiceRunningState;
}
/// <summary>
/// 获取服务描述信息
/// </summary>
/// <param name="serviceNmae"></param>
/// <returns></returns>
private string GetServiceDescription(string serviceNmae)
{
string ServiceDescription = string.Empty;
System.ServiceProcess.ServiceInstaller si = new ServiceInstaller();
//si.Description
return ServiceDescription;
}
/// <summary>
/// 设置服务启动类型
/// </summary>
/// <param name="Mode">2:自动 3:手动 4:禁用</param>
/// <param name="serviceName"></param>
/// <returns></returns>
public bool SetServiceStartMode(int Mode, string serviceName)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\" + serviceName, true);
key.SetValue("Start", Mode);
key.Close();
}
catch (Exception)
{
return false;
}
return true;
}
#endregion