2009-01-29 47 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