调试windows服务的一点经验【补充】
227 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();
}
这个方法虽然有点投机,不过确实能够节省很多步骤,让调试服务和调试一般的应用程序那样方便!值得推荐
声明: 此Blog中的文章和随笔仅代表作者在某一特定时间内的观点和结论,对其完全的正确不做任何担保或假设
本站文章均采用 知识共享署名-相同方式共享3.0 协议进行授权,除非注明,本站文章均为原创,转载请注明转自 Timothy's Space 并应以链接形式标明本文地址!
你可能也对下列文章感兴趣
- 没有相关文章!
请教一个有关windows服务的问题:
我在windows2000下安装了一个我自己开发的windows 服务程序,安装和启动都已经成功,在任务管理器中也已经显示出该进程(补充:cpu时间显示为0),但是事实上服务并没有执行具体操作。
我通过附加形式调试该服务,也不能到断点(安理说这个断点不可能不到的)。
还有就是在windows2003服务器上也安装了这个服务,执行都是正常的。
我真的很困扰,不知道是什么原因导致出现这个问题,难道系统环境有关系?能不能帮帮我!谢谢!
看看这个服务运行的角色是什么? 指定的某个用户,还是localsystem?
用OutputDebug那个接口函数把信息输出到调试器中,可以试试
有些东西很难用ide调的