#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