2009-01-29 50 views
0

我正在研究包含Windows服務和與該服務交互的WinForms客戶端的解決方案。如何檢測項目版本中的Windows服務

在我的預生成和生成後事件中,我有一些net startnet stop命令來啓動和停止服務,但有時會導致問題(文件未找到,服務已停止等等)。 )。

有沒有一種方法來測試服務將發行net start?

運行或安裝之前,我想將這個測試在.cmd文件,併爲預生成事件運行項目。

回答

1

您實際上不需要每次都安裝,啓動和停止服務。相反,考慮在服務可執行文件中添加一個命令行密鑰,以便在指定它時作爲服務運行(即,執行通常的ServiceBase.Run()),當該密鑰不存在時,它將作爲常規控制檯運行應用。您將獲得能夠將記錄器輸出直接轉儲到控制檯的額外好處,從而使調試變得更容易。

if(args.GetLength(0) == 1 && args[0].ToUpper() == "/SERVICE") 
{ 
    ServiceBase[] services = new ServiceBase[] { new MyService() }; 
    ServiceBase.Run(services);   
} // if 
else 
{ 
    InitAndStartWhateverIsNecessaryToRunServer(); 
    Console.ReadLine();  
} // else 
1

將其粘貼到vb腳本文件中並添加到構建前和構建事件中。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colRunningServices = objWMIService.ExecQuery _ 
      ("SELECT * FROM Win32_Service WHERE Name = 'someService'") 
Set objService = colRunningServices(0) 
If objService.State <> "Running" And objService.State <> "Starting" Then 
    objService.StartService() 
End If