windows服务程序的调试

    技术2025-04-15  22

    一、服务程序概述

    要使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)、新建KeyKey的值就是你的服务程序所对应可执行文件名(不含路径)

    3)、在注册表右栏,新建一个“字符串值”,并命名为:Debugger,它的值为windbg.exe

          的路径(绝对路径),具体如下图所示。

     

     

    4)、调度服务程序,此时会弹出windbg的主界面,请将源cpp文件打开,并设置断点。

          至此,服务程序的源代码级调试过程完成。

    注意:

    a、因为SCM在一定时间收不到对应服务程序的StartServiceCtrlDispatcher指令会报服务启动

      错误,所以,你尽量不要在调用这个函数之前耽误太多的时间。具体时间没有查到,估计

      20秒之内。

    b、要调试ServiceMain的话,请在调用StartServiceCtrlDispatcher函数之前设置断点。因

       ServiceMain是个回调函数。

     

    2、调试正在运行的服务程序

             这个简单,只需要打开windbg.exe,然后附加到指定的服务程序上就可以调试了。

    最新回复(0)