调试windows服务的一点经验【补充】

143 views 九月 18, 06 by Timothy

上次写过一个调试windows服务的一点经验的日志。这段时间也在做一个和Windows Service有关的东西。又有了些经验,所以拿来和大家分享下。调试windows服务,采用的一般方法,就是设好断点,然后启动服务,在IDE里面直接通过进程列表,把Service的exe附加到IDE上面来调试,这个方法在上一个日志也提到过。其实在.NET建立的服务程序中,还有一个方法,也是之前没有想到的方法,更为简单 :)

// 进程的主入口点
static void Main()
{
System.ServiceProcess.ServiceBase[] ServicesToRun;

// 同一进程中可以运行多个用户服务。若要将
//另一个服务添加到此进程,请更改下行
// 以创建另一个服务对象。例如,
//
// ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()};
//
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };

System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}

也就是在Main方法,服务程序开始的地方,如上,把默认的创建并运行服务的代码全部注释掉,然后直接生成本类的一个实例,然后调用OnStart方法就可以了,这里要注意的是OnStart方法是一个受保护的无返回值的方法,而Main函数是静态方法,所以需要把OnStart也改动一下,设置为静态函数。这样的话,服务和一般的.net应用程序就一样了,调试的时候更加方便,直接F5就可以了 :) 不过在完成调试过后,一定记得要把上面的改动还原 [cool]

改动后的代码如下:

// 进程的主入口点
static void Main()
{
Service1 obj=new Service1();
obj.OnStart();
}

这个方法虽然有点投机,不过确实能够节省很多步骤,让调试服务和调试一般的应用程序那样方便!值得推荐



随机日志

Add your comment

3 Responses to "调试windows服务的一点经验【补充】"

  1. Doris CHINA 说:

    请教一个有关windows服务的问题:
    我在windows2000下安装了一个我自己开发的windows 服务程序,安装和启动都已经成功,在任务管理器中也已经显示出该进程(补充:cpu时间显示为0),但是事实上服务并没有执行具体操作。

    我通过附加形式调试该服务,也不能到断点(安理说这个断点不可能不到的)。
    还有就是在windows2003服务器上也安装了这个服务,执行都是正常的。

    我真的很困扰,不知道是什么原因导致出现这个问题,难道系统环境有关系?能不能帮帮我!谢谢!

  2. cooldog CHINA 说:

    看看这个服务运行的角色是什么? 指定的某个用户,还是localsystem?

  3. 无极之道 CHINA 说:

    用OutputDebug那个接口函数把信息输出到调试器中,可以试试
    有些东西很难用ide调的


Leave a Reply

(Ctrl+Enter)