c# - 没有调用 Windows 服务 OnStart 的原因可能是什么?

标签 c# .net windows-services

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

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

Windows could not start the WU Distribution Service service on Local Computer. Error 1053: The service did not respond to the start or control request in a timely fashion.

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

A timeout was reached (30000 milliseconds) while waiting for the WU Distribution Service service to connect.

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

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

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

最佳答案

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

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

如果您需要在生命的最初时刻调试服务,那么您需要逐渐成为一名真正的调试人员。参见 KB824344 How to debug Windows services ,特别是 Configure a service to start with the WinDbg debugger attached,我通常使用 gflags,比注册表更优雅。您需要将远程桥接到您自己的 session 中附加的 WinDbg 服务,请参阅 Remote Debugging Using WinDbg .您可以在 WinDbg 中调试托管代码,这不完全是 VS 正在做的豪华体验,而是机器正在做的事情。

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

关于c# - 没有调用 Windows 服务 OnStart 的原因可能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010006/

相关文章:

c# - 如何获取 RichTextBox 控件中的当前行?

c# - 如何在 c#.net 中返回数据集

c# - 安装后设置服务依赖

c# - 如何检查当前用户是否有权重新启动 Windows 服务?

c# - Windows 服务配置文件

c# - 是否可以结合两个条件

c# - C# .net 核心中的 Path.GetDirectoryName

c# - C# 中的 CTCP 原始协议(protocol) ACTION 命令

c# - 试图了解 .net 中的任务

c# - 使用distinct删除重复项