调试Windows服务

时间:2010-12-07 09:26:28

标签: c# visual-studio winforms debugging windows-services

我创建了一个Windows服务,每2分钟向用户发送一次电子邮件通知(从db检索到的列表)。我希望检查Web服务中的所有内容是否正常运行,因此我希望调试该服务。当完成应用程序的服务器设置时,该服务安装在SMC(services.msc)中。

我的问题:如何调试Windows服务?

无法

查看服务
  1. 任务管理员
  2. 附加到流程
  3. 我试过以下链接

    我还从http://msdn.microsoft.com/en-us/library/aa291232%28VS.71%29.aspx#vxtskdebuggerpermissionsdebuggingasystemservice

    中获得了调试权

    如果需要任何输入,请告诉我。

    谢谢!

    编辑: @maycil

    我写了你的If(!Debug)代码,但我觉得有些问题,因为我看不到Visual Studio的正确颜色。

    alt text

2 个答案:

答案 0 :(得分:2)

static void Main()
{
#if (!DEBUG)


            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] { new Service1Component() };
            ServiceBase.Run(ServicesToRun);


#else
            Service1Component s = new Service1Component();
            s.StartProcess();
#endif
}

在Service1Companent.cs中尝试此代码

答案 1 :(得分:2)

根据maycil的回答,您可以使用Environment.UserInteractive检查服务是否在附加控制台的情况下运行。这样,它既可以作为服务,也可以作为控制台应用程序进行调试。

static void Main( string[] args )
{
    if( !Environment.UserInteractive )
    {
        var servicesToRun = new ServiceBase[] {new Service1Component()};
        ServiceBase.Run( servicesToRun );
    }
    else
    {
        var services = new Service1Component();
        services.Start()
        Console.WriteLine( "Press return to exit" );
        Console.ReadLine();
        services.Stop();
    }
}