【问题标题】:What can be the reasons why windows service OnStart is not called?没有调用 Windows 服务 OnStart 的原因可能是什么?
【发布时间】:2014-05-25 10:57:18
【问题描述】:

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

我得到带有消息的对话窗口:

Windows 无法在本地启动 WU 分发服务服务 计算机。错误 1053:服务没有响应启动或 及时控制请求。

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

等待 WU 时超时(30000 毫秒) 要连接的分发服务服务。

我的服务类有默认生成的构造函数,只调用InitializeComponent(),所以没什么大不了的。

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

我需要知道OnStart 未被调用的原因。

【问题讨论】:

    标签: c# .net windows-services


    【解决方案1】:

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

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

    如果您需要在生命的最初阶段调试服务,那么您需要学习真正的调试器。见KB824344 How to debug Windows services,特别是配置服务以启动附带的WinDbg调试器,我通常使用gflags,比注册表更优雅。您需要将远程连接到您自己的会话中附加的 WinDbg 服务,请参阅Remote Debugging Using WinDbg。您可以在 WinDbg 中调试托管代码,这并不完全是 VS 正在做的豪华体验,而是机器上真正的交易正在做。

    首先要测试的一个简单的事情是您的可执行文件在服务帐户下启动时的行为方式。如果服务作为本地系统运行,则使用psexec -i -s

    【讨论】:

    • 谢谢!我完全忘了看 Main 方法。在 DEBUG 模式下,服务需要与桌面交互,因为它作为 WinForms 应用程序运行,而不是服务...facepalm。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2013-02-16
    • 2021-09-01
    • 2012-01-01
    • 2015-08-05
    • 2020-10-16
    • 1970-01-01
    相关资源
    最近更新 更多