做項目需要對Windows服務進行操作,從網上找了一些資料,總結如下:
(以下程序在程序中測試通過)
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 using System.Collections; 9 using System.Configuration.Install; 10 using System.Collections.Specialized; 11 using System.ServicePRocess; 12 13 namespace IAU.ServerInstall.BLL 14 { 15 public class ServiceControl 16 { 17 /// <summary> 18 /// 注冊服務(注冊完就啟動,已經存在的服務直接啟動。) 19 /// </summary> 20 /// <param name="strServiceName">服務名稱</param> 21 /// <param name="strServiceInstallPath">服務安裝程序完整路徑(.exe程序完整路徑)</param> 22 public void Register(string strServiceName, string strServiceInstallPath) 23 { 24 IDictionary mySavedState = new Hashtable(); 25 26 try 27 { 28 System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(strServiceName); 29 30 //服務已經存在則卸載 31 if (ServiceIsExisted(strServiceName)) 32 { 33 //StopService(strServiceName); 34 UnInstallService(strServiceName, strServiceInstallPath); 35 } 36 service.Refresh(); 37 //注冊服務 http://m.survivalescaperooms.com/sosoft/ 38 AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); 39 40 mySavedState.Clear(); 41 myAssemblyInstaller.Path = strServiceInstallPath; 42 myAssemblyInstaller.UseNewContext = true; 43 myAssemblyInstaller.Install(mySavedState); 44 myAssemblyInstaller.Commit(mySavedState); 45 myAssemblyInstaller.Dispose(); 46 47 service.Start(); 48 } 49 catch (Exception ex) 50 { 51 throw new Exception("注冊服務時出錯:" + ex.Message); 52 } 53 } 54 55 /// <summary> 56 /// 卸載服務 57 /// </summary> 58 /// <param name="strServiceName">服務名稱</param> 59 /// <param name="strServiceInstallPath">服務安裝程序完整路徑(.exe程序完整路徑)</param> 60 public void UnInstallService(string strServiceName, string strServiceInstallPath) 61 { 62 try 63 { 64 if (ServiceIsExisted(strServiceName)) 65 { 66 //UnInstall Service 67 AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); 68 myAssemblyInstaller.UseNewContext = true; 69 myAssemblyInstaller.Path = strServiceInstallPath; 70 myAssemblyInstaller.Uninstall(null); 71 myAssemblyInstaller.Dispose(); 72 } 73 } 74 catch (Exception ex) 75 { 76 throw new Exception("卸載服務時出錯:" + ex.Message); 77 } 78 } 79 80 81 /// <summary> 82 /// 判斷服務是否存在 83 /// </summary> 84 /// <param name="serviceName">服務名</param> 85 /// <returns></returns> 86 public bool ServiceIsExisted(string serviceName) 87 { 88 ServiceController[] services = ServiceController.GetServices(); 89 foreach (ServiceController s in services) 90 { 91 if (s.ServiceName == serviceName) 92 { 93 return true; 94 } 95 } 96 return false; 97 } 98 99 /// <summary>100 /// 啟動服務(啟動存在的服務,30秒后啟動失敗報錯)101 /// </summary>102 /// <param name="serviceName">服務名</param>103 public void StartService(string serviceName)104 {105 if (ServiceIsExisted(serviceName))106 {107 System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);108 if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)109 {110 service.Start();111 for (int i = 0; i < 30; i++)112 {113 service.Refresh();114 System.Threading.Thread.Sleep(1000);115 if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)116 {117 break;118 }119 if (i == 29)120 {121 throw new Exception("服務" + serviceName + "啟動失敗!");122 }123 }124 }125 }126 }127 128 /// <summary>129 /// 停止服務(停止存在的服務,30秒后停止失敗報錯)130 /// </summary>131 /// <param name="serviceName"></param>132 public void StopService(string serviceName)133 {134 if (ServiceIsExisted(serviceName))135 {136 System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);137 if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)138 {139 service.Stop();140 for (int i = 0; i < 30; i++)141 {142 service.Refresh();143 System.Threading.Thread.Sleep(1000);144 if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)145 {146 break;147 }148 if (i == 29)149 {150 throw new Exception("服務" + serviceName + "停止失敗!");151 }152 }153 }154 }155 }156 }157 }
博客園 柔城 以上代碼概述:
C#對Windows服務操作(注冊安裝服務,卸載服務,啟動停止服務,判斷服務存在)
新聞熱點
疑難解答