是否可以在不使用可启动应用程序中的代码的情况下调试Windows服务或类库?有一个关于这样做的线程,但是这些技术不起作用并继续说“无法启动服务......”因为我使用的是Windows服务。
由于
答案 0 :(得分:3)
您是否首先编写服务?如果是这样,请帮自己一个忙,并使用TopShelf。它将允许您创建一个简单的控制台应用程序,您可以将其作为控制台应用程序进行调试,但它也可以注册为服务并按原样运行。
我的经验非常方便,因为您可以根据需要轻松调试服务,而无需更改任何代码。
答案 1 :(得分:1)
在主函数中,只需运行要测试的实际代码,而不是调用ServiceBase.Run(servicesToRun)
。
我通常会输入代码来检查命令行参数,如:
-c run in console mode
-i install the service
-u uninstall the service
none run the service
然后设置VS以在调试模式下发送-c。
答案 2 :(得分:0)
这里有一些可用于附加调试器的代码。我发现在过程开始时很难附加调试器。当我在CodeProject上发现这个奇妙的剪辑时,我相信。
无论如何,将其添加到OnStart,构建,安装和启动您的服务。一旦你开始它将看起来像它已挂起。附加到服务进程(确保选择了正确的附加到代码库,并且甚至可以调试启动。
protected override void OnStart(string[] args)
{
#if DEBUG
while (!Debugger.IsAttached) // Waiting until debugger is attached
{
RequestAdditionalTime(1000); // Prevents the service from timeout
Thread.Sleep(1000); // Gives you time to attach the debugger
}
RequestAdditionalTime(20000); // for Debugging the OnStart method,
// increase as needed to prevent timeouts
#endif
// here is your startup code with breakpoints
}
HTH