这样的程序有什么限制,怎么样才能注册到服务中去。

解决方案 »

  1.   

    如果只是将一个程序注册为服务,98下程序段如下:
              DWORD dwVersion = GetVersion();    //取得Windows的版本号 
              if (dwVersion >= 0x80000000)       // Windows 9x隐藏任务列表 
              { 
                 int (VVBACK *rsp)(DWORD,DWORD); 
                HINSTANCE dll=LoadLibrary("KERNEL32.DLL");    //装入KERNEL32.DLL 
                  rsp=(int(VVBACK *)(DWORD,DWORD))GetProcAddress(dll,"RegisterServiceProcess");    //找到RegisterServiceProcess的入口 
                  rsp(NULL,1);    //注册服务 
                  FreeLibrary(dll);    //释放DLL模块 
              } 
        要真正编写服务程序,服务的代码必须要有一个一般的main或者WinMain函数。这个函数应该会马上调用StartServiceCrtlDispatcher函数。通过调用这个函数,你可以让SCM得到ServiceMain函数的指针,这样在SCM要启动该服务时,就可以调用它。    在SCM要启动服务的时候,就会调用ServiceMain函数。例如,如果管理员在服务管理器中按下启动的按钮,SCM就会在一个独立的线程中执行ServiceMain函数。ServiceMain应该调用RegisterServiceCtrlHandler函数,这样可以注册一个Handler函数,以便SCM对服务进行控制。Handler函数的名字可以是任意的,不过它会在Handler下的文档中列出来。RegisterServiceCtrlHandler函数会返回一个句柄,在服务需要发送状态信息给SCM时,可以通过该句柄进行。    ServiceMain函数也必须启动做该服务实际工作的线程。在服务停止前,ServiceMain函数是不应该有返回的。当它返回的时候,服务已经停止了。    Handler函数包含了一个switch语句,用来分析由SCM传送过来的请求。默认的情况,SCM可以发送以下任何的的控制常数:     SERVICE_CONTROL_STOP - 要服务停止
         SERVICE_CONTROL_PAUSE - 要服务暂停
         SERVICE_CONTROL_CONTINUE - 要服务继续
         SERVICE_CONTROL_INTERROGATE - 要服务马上报告它的状态
         SERVICE_CONTROL_SHUTDOWN - 告诉服务即将关机  也可以创建自定义的常数(值在128到255之间),并且通过SCM发送给服务。http://www.codeproject.com/useritems/GenericWindowsService.asp也有相应的英文资料。