Windows服务调试繁琐

时间:2011-04-06 16:07:27

标签: .net windows-services

我正在构建我的第一个Windows服务......真是一次冒险。

为了让我开始,我按照以下步骤开始:

http://msdn.microsoft.com/en-us/library/zt39148a.aspx#Y902

它的结构非常好而且有效!...这意味着我在创建的事件日志中获得In onStart和In onStop日志消息。

现在,我的问题是:

每次更改服务代码时,我都需要重建安装项目,将服务项目添加为主项目输出并重新安装服务。

这很乏味,所以我问是否有更好的方法来测试和调试服务。

最好的问候

2 个答案:

答案 0 :(得分:5)

一旦您的服务停止,您应该只需通过在旧版本上复制新版本来更新二进制文件。

答案 1 :(得分:1)

有时我只是想在Windows服务中测试一些代码而不需要它作为服务运行我会做什么我会修改Main()。

所以我的Main不是这样的:

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

我将其修改为

Service1 service = new Service1();
service.Run();
// Put a breakpoint on the following line to always catch
// your service when it has finished its work
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);

让我说我的OnStart方法看起来像这样:

protected override void OnStart(string[] args)
 {
     // code to start your service.
     ThreadStart ts = new ThreadStart(Run);
     Thread t = new Thread(ts);
     t.Start();
}

因此Run()只是OnStart方法启动的方法。

请记住,这并不能保证您的服务在作为服务安装后能够正常运行。但有时它对快速测试一些代码很有用。