调试Windows服务而不消耗其他应用程序的代码

时间:2010-06-03 08:48:40

标签: c# windows-services

是否可以在不使用可启动应用程序中的代码的情况下调试Windows服务或类库?有一个关于这样做的线程,但是这些技术不起作用并继续说“无法启动服务......”因为我使用的是Windows服务。

由于

3 个答案:

答案 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