为什么不调用Windows服务OnStart的原因是什么?

时间:2014-04-11 10:26:59

标签: c# .net windows-services

我已经安装了我的服务但无法启动它。

我得到一个消息对话窗口:

  

Windows无法在Local上启动WU Distribution Service服务   电脑。错误1053:服务没有响应开始或   及时控制请求。

两个EventLog条目:第一个具有相同的消息,第二个具有:

  

等待WU时达到超时(30000毫秒)   配送服务连接。

我的serivce类有默认生成的构造函数,只有InitializeComponent()的调用,所以没有什么重。

为了检查OnStart运行了多长时间我插入了Debug.WriteLine次篡改,并添加了TextWriterTraceListener并将Debug.AutoFlush设置为true。
没有创建日志文件,因此未调用OnStart 绝对确定我只是在OnStart内抛出异常,但仍然没有得到关于异常的消息。

我需要知道为什么OnStart没有被调用的原因。

1 个答案:

答案 0 :(得分:1)

您必须进行调试才能看到会发生什么。您可以添加更多打印件,我建议消除并发症,只需写入文件流而不是调试侦听器。

您可以将调试程序附加到正在运行的进程,请参阅How to: Debug Windows Service Applications,但这需要服务启动并运行。如果它在启动时挂起,你仍然有很好的机会,因为你可以检查挂起状态并了解会发生什么。

如果您需要在生命的第一时刻调试服务,那么您需要毕业于真正的调试器。请参阅KB824344 How to debug Windows services,特别是配置服务以附带WinDbg调试器开始,我通常使用gflags,比注册表更优雅。您需要从您自己的会话中将远程连接到服务附加的WinDbg,请参阅Remote Debugging Using WinDbg。您可以在WinDbg中调试托管代码,这不是VS正在做的豪华体验,但这是真正的交易关于机器在做什么。

首先要测试的一件容易的事情是,在服务帐户下启动时,您的可执行文件的行为如何。如果服务作为localsystem运行,则使用psexec -i -s