看过MSDN和网上很多将程序或者编译后的exe文件如何做成Windows服务的文章,基本都提到了启动windows服务时,应用的程序入口点,也就是我们常说的main函数或者winmain等等。启动windows服务,很好理解,就是windows启动一个程序后台运行,可能复杂的就是根据服务的以来关系,来按照先后次序来启动程序。在任何资料中,我没有看到关于停止windows服务的内容,尤其是看到将exe作为windows服务的文章之后。难道任何一个exe都能做成windows服务?我的意思是,即使程序有一个消息循环或者是一个while(1)的循环,不需要别的任何特殊结构,就可以做成windows服务?程序入口点很简单,那么当停止一个windows服务,操作系统如何通知exe程序安全退出?是否需要一个类似main的入口函数一样的出口函数吗?否则能否安全退出?操作系统难道要发送kill信号吗?哪位对windows服务比较熟悉,麻烦给详细的讲解一下。我打算用VC2005或者2008来写windows服务程序。总结一下,我主要是不知道windows以何种手段使windows服务安全退出。应用程序需要给予何种支持,才能使程序具有安全退出的能力。

解决方案 »

  1.   

    服务程序初始化时需要调用RegisterServiceCtrlHandlerEx函数来注册一个HandlerEx回调函数,服务管理器会调用这个回调函数来通知各种事件,其中SERVICE_CONTROL_STOP就是退出服务。
      

  2.   

    Service programs are generally written as console applications. The entry point of a console application is the main function. The main function receives arguments from the ImagePath value from the registry key for the service. "即使程序有一个消息循环或者是一个while(1)的循环,不需要别的任何特殊结构,就可以做成windows服务?"我想这是没问题的。
      

  3.   

    service初始化的时候会注册service handle,当停止service的时候,会收到系统通知,这个时候你就应该退出你的while(1),然后做一下退出的清理的工作
      

  4.   

    那就是说,普通的exe做成windows服务,在退出时是不安全的。
      

  5.   

    服务程序和驱动程序有点像,就是你要按照系统的规程提供接口函数,然后系统给你命令,服务程序完成相关操作看下这个例子
    A Windows Service Applicationhttp://www.codeproject.com/KB/system/Sund_WindowService.aspx
      

  6.   

    Read book:
    Programming Server-Side Applications for Windows2000
    服务有服务的具体标准,不用猜,看看书就明白了。
      

  7.   

    给WINDOWS发送停止服务的请求,别的不是你控制的,就不要管了
      

  8.   

    在网上找一个windows服务程序的模板,改改最省事
    一个服务程序,总是要实现注册、删除、启动、停止、暂停、恢复等基本消息,能够与系统服务控制器进行消息交互才算完整
      

  9.   


    OK, I see. Thank you all.