2013-04-04 37 views
0

我使用的是安裝項目
提出在Windows服務更改代碼瞭解窗口服務
我安裝了Windows服務
現在在類的構造方法安裝前已經安裝該項目安裝的我檢查,如果sercvice已經被檢查如果Windows服務是從C#代碼

ServiceController[] sc = ServiceController.GetServices(); 
     foreach (ServiceController service in sc) 
      if (service.ServiceName == "VService") { flag = false; break; } 
      else flag = true; 
     if (flag) 
     { 
      ServiceInstaller ServiceInstallerObj = new ServiceInstaller(); 
      InstallContext Context = new InstallContext(); 
      ServiceInstallerObj.Context = Context; 
      ServiceInstallerObj.ServiceName = "VService"; 
      ServiceInstallerObj.Uninstall(null); 
     } 

安裝,但我想這是不卸載Windows服務因爲當我更改屬性窗口中設置項目的版本並運行安裝程序時在構建項目時生成我得到一個錯誤,說服務無法啓動,因爲它已經在運行,任何機構都可以告訴我一個解決這個問題的方法或者其他一些可以完成的方法。感謝

+0

而不是使用任意'flag',使用LINQ,如'VAR vServices = ServiceController.GetServices()式(S => s.ServiceName == 「VService」)ToList()。;如果(vServices.Any()){//停止服務並卸載}' – nicodemus13 2013-04-04 15:04:18

+0

謝謝@ nicodemus13我現在明白了你的觀點如何卸載服務(我正在使用服務控制器來停止服務) – 2013-04-05 09:34:31

+0

我認爲@ icemanind's代碼會處理,不是嗎? – nicodemus13 2013-04-05 09:38:36

回答

0

你要使用這樣的代碼:

using System.ServiceProcess; 

ServiceController sc = new ServiceController(SERVICENAME); 

switch (sc.Status) 
{ 
    case ServiceControllerStatus.Running: 
     return "Running"; 
    case ServiceControllerStatus.Stopped: 
     return "Stopped"; 
    case ServiceControllerStatus.Paused: 
     return "Paused"; 
    case ServiceControllerStatus.StopPending: 
     return "Stopping"; 
    case ServiceControllerStatus.StartPending: 
     return "Starting"; 
    default: 
     return "Status Changing"; 
} 

的狀態標誌會告訴你的是正在運行的服務。

0
ManagedInstallerClass.InstallHelper(new[] { "/u", Assembly.GetExecutingAssembly().Location }); 
相關問題