#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