【发布时间】:2010-05-12 13:26:38
【问题描述】:
我的开发盒是一台 Windows 7 (x64) 机器。我有一些代码(C#、.net 2.0)在某些情况下检查服务是否正在运行然后停止它。
ServiceController matchedService = //My Service!
//If statements and such
matchedService.Stop();
matchedService.WaitForStatus(ServiceControllerStatus.Stopped);
现在,我可以验证 MyService 确实已安装并正在运行。我可以告诉你我在调试时以管理员身份运行 Visual Studio 2008。我还可以验证在几个 If 语句之后,我结束了编程的 .Stop() 和 .WaitForStatus() 部分。我确实知道,如果跳过 .Stop() 调用,服务本身就会继续运行(在 Services 中查看它,尽管我想到了也许我应该为此找一个更好的工具。我'确定有一些 sysinternals 工具可以为我提供更多信息)。当我越过 .WaitForStatus() 调用时,我基本上都在等待停止状态。 . .永远。好吧,我昨天(两次)让它在那里坐了超过 15 分钟,但没有任何反应。我们永远不会进入下一行代码。感觉就像 Bowie 的 Space Oddity(你知道我在说什么)。
关于 MyService 有很多你不知道的事情。你不会明白的事情。你做不到的事情。 . .让我清楚地说明这一点。没有服务依赖于 MyService 并且 MyService 不依赖于其他服务。 附录 MyOtherService 和 SonOfMyService 在代码中的这一点上似乎都表现正确。所有这些服务都具有相同的特征(它们是我们自己在秘密实验室中孵化的服务,没有依赖关系)。 MyService 安装是否可能有问题?
我确实知道,如果此时我停止调试,MyService 仍会在 Services 中被列为正在运行(即使在点击刷新后)。如果我尝试重新启动它(或再次运行我的应用程序并到达这一点),我会收到一条关于它无法接受控制消息的消息。之后,服务显示为已停止,我可以正常启动了。
为什么服务没有停止?这是win 7的怪癖吗?我未能理解 ServiceController 或 Win Services?
【问题讨论】:
标签: c# .net windows-7 service servicecontroller