一、服务程序概述
要使windows服务程序能够运行一般需要经过以下二步:
1、安装服务
安装服务可以有多种方法(可以能第三方的软件或命令实现),我介绍二种
(1)、通过SC命令安装服务
sc create "myservice" binPath= c:/myservice.exe
注意:binPath=后面有个空格,否则不能正确安装服务;myservice是服务名称。
(2)、服务程序本身实现安装,如myservice.exe -i
2、调度服务
服务调度无非是能服务进行“启动、暂停、停止”等动作。
二、服务程序的调试
服务程序的调试主要分为以下二类(所有程序也应该是如些的:) )
1、调试服务程序启动过程
MSDN上有很多方法来做这件事,我这里只提供一种方法(摘自MSDN),具体步骤如下:
(1)、打开注册表,找到以下key
HLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options
(2)、新建Key,Key的值就是你的服务程序所对应可执行文件名(不含路径)
(3)、在注册表右栏,新建一个“字符串值”,并命名为:Debugger,它的值为windbg.exe
的路径(绝对路径),具体如下图所示。
(4)、调度服务程序,此时会弹出windbg的主界面,请将源cpp文件打开,并设置断点。
至此,服务程序的源代码级调试过程完成。
注意:
a、因为SCM在一定时间收不到对应服务程序的StartServiceCtrlDispatcher指令会报服务启动
错误,所以,你尽量不要在调用这个函数之前耽误太多的时间。具体时间没有查到,估计
在20秒之内。
b、要调试ServiceMain的话,请在调用StartServiceCtrlDispatcher函数之前设置断点。因
为ServiceMain是个回调函数。
2、调试正在运行的服务程序
这个简单,只需要打开windbg.exe,然后附加到指定的服务程序上就可以调试了。