安装用于调试的WindowsService



我正在尝试启动我的调试构建WindowsService,但我得到错误,它没有及时启动。

我已经清理了tor和OnStart,但它仍然不会启动,所以我想也许它加载的dll需要更好地安装,而不仅仅是在我的项目目录的调试目录。也许在main()中所有的凸起都是为了晾干?

有调试服务的指针吗?我不能直接在VStudio中运行它,因为显然不允许进入它的OnCustomCommand(int cmd)成员并在那里破坏它。

如果我理解正确,您希望能够在服务处于空闲"已启动"状态之前调试它?

你可以使用Debugger.Break()函数。例如,在调试构建时,我们经常将以下代码放入Main函数中:

#if DEBUG
if (!Debugger.IsAttached)
{
    Debugger.Break();
}
#endif

我只会在OnStart方法中尽可能少地做,足够的init来启动一个线程来完成所有的工作,所以你可以尽快从OnStart返回。然后在线程委托中,你可以添加Reddog的代码来进入调试器,可能是用线程。在那里睡觉,这样你就有时间先连接到进程。

另一种选择是在你的服务中添加一个main方法,它可以创建一个服务类的实例并调用onstart/onstop,并将项目输出更改为控制台应用程序,然后你可以获得两全其美的效果,它将通过installutil作为服务安装,你可以在visual studio中作为控制台应用程序运行和调试它。

细节

如果你只想把服务作为一个服务来调试,那么我建议你的OnStart方法启动一个线程来处理然后返回,然后线程委托可以做一个线程。休眠(一段合理的时间),然后Debugger.Break();

线程睡眠让你有机会将调试器附加到进程上,在你使用服务控制管理器启动服务之后,然后它到达debugger . break(),这将强制调试器中断,允许你单步执行。关键是要在30秒之前从OnStart返回,并在遇到断点之前将调试器附加到进程。

还有,我认为调试器。Break为您提供了附加调试器的选项,因此尝试在代码中(不确定它是否与服务很好地配合,尽管它们应该没有UI),您可能会摆脱坚持调试器。

相关内容

  • 没有找到相关文章

最新更新