2010-12-07 138 views
-1

我创建了一个Windows服务,每隔2分钟向用户发送一个电子邮件通知(从db检索的列表)。我想检查一下在web服务中一切正常,因此我希望调试服务。当完成应用程序的服务器设置时,该服务安装在SMC(services.msc)中。调试Windows服务

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

不能看到

  1. 任务管理器服务
  2. 附加到进程

我从以下链接

我也给调试的权利,让我知道你所需要的资料。

谢谢!

编辑: @maycil

我把你的If(!Debug)代码,但我想有一些问题,因为我没有看到Visual Studio中的适当的色彩。

alt text

+0

操作系统? – Aliostad 2010-12-07 09:30:23

+0

你可以运行它作为控制台应用程序,然后调试..据我所知,它不可能直接调试作为服务运行的代码。 http://tech.einaregilsson.com/2007/08/15/run-windows-service-as-a-console-program/ – 2010-12-07 09:30:44

+2

您是否勾选了“附加到进程”窗口中的“显示所有会话中的进程”复选框? – jvanrhyn 2010-12-07 09:30:49

回答

1
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

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(); 
    } 
}