这样的程序有什么限制,怎么样才能注册到服务中去。
解决方案 »
- VC中WebBrowser控件应用的问题
- 为何命名的空间与未命名的空间,在可见性上有区别呢?
- 收缩式窗口怎么写,思路告诉一下
- 关于VC++ MFC ListBox控件显示数据的问题
- 程序运行一段时间崩溃,如何调试找到崩溃的位置呢??
- 按钮ID不显示
- 我想用GetProcAddress获取用CreateProcess创建的进程里的一个函数地址,但是GetProcAddress要求的是进程的HMODULE/HINSTANCE,所以我要取得
- 请教:如何防止控件ID的重复?谢谢!
- 在dialog上动态创建一些按钮,在OnPaint()函数里给这些按钮涂色,为什么彩色一闪而过,留下的还是灰色的按钮?
- MFC串口程序中发出了数据,接收没有显示。新人求问~
- 数字签名时,如何做cab文件里的.inf文件阿!
- 怎么让一个程序每隔10分钟自动运行一次?
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也有相应的英文资料。