我正在尝试开始调试构建 WindowsService 但是,我会发现它没有及时开始的错误。

我已经清理了CTOR, OnStart 但是它仍然不会开始,所以我认为也许需要更好地安装它的dll,而不仅仅是在我的项目目录的调试目录中。也许所有的bumpf main() 正在闲逛干燥吗?

有任何调试服务的指针吗?我不能直接在Vstudio中运行它,因为显然这不允许进入 OnCustomCommand(int cmd) 会员并将其打破。

有帮助吗?

解决方案

如果我正确理解,您希望能够在服务坐在闲置的“开始”状态之前调试该服务吗?

您可以使用 debugger.break() 为此功能。例如,在调试构建中,我们经常将以下内容放入我们的主要功能中:

#if DEBUG

if (!Debugger.IsAttached)
{
    Debugger.Break();
}

#endif

其他提示

我只会在Onstart方法中尽可能少地做,足以启动完成所有工作的线程,因此您可以尽快从Onstart返回。然后,在线程委托中,您可以添加reddog的代码以分解调试器,可能会用螺纹。在其中sleep.sleep,以便您让您有时间首先附加到该过程。

另一个替代方法是在您的服务中添加主要方法,该方法可以创建服务类的实例并致电OnStart/OnStop,并将项目输出更改为控制台应用程序,然后您获得了两全其美的功能,它将安装为通过Installutil的服务,您可以将其运行并在Visual Studio中作为控制台应用程序进行调试。

细节 这里

如果您只想将服务作为服务调试,那么我建议您的onstart方法启动一个线程,然后进行处理然后返回,线程委托可以进行线程。 debugger.break();

线程睡眠使您有机会使用服务控制管理器启动服务后,将调试器附加到该过程中,然后将其转到Debugger.break(),这将迫使调试器打破,从而使您可以单一步骤。关键是要在30秒之前从Onstart返回,并在碰到断点之前将调试器附加到该过程。

另外,我认为Debugger.break为您提供了连接调试器的选项,因此请在代码中尝试使用(不确定它是否可以使用服务,因为它们应该没有UI,因此您可能会脱颖而出。进入您的代表并在30秒之前附加到该过程中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top