文档介绍:踏雪无痕
VC++6开发Windows服务程序
分类: C++ 2012-05-02 17:01 126人阅读评论(0) 收藏举报
下面介绍使用VC++开发Windows服务程序。
首先运行VC++6,选择新建工程,在出现的下面窗口中选择” AppWizard“,并选择
工程放置位置和相应的工程名,然后选择确定按钮。
此时出现如下图窗口界面,在此界面中选择”服务(EXE)“,然后选择完成按钮。
在接下来的窗口中选择确定按钮。
则VC完成向导并生成相应代码(效果如下)。
程序的进入点是全局函数_tWinMain, 仔细看一下这个函数,我们会发现当我们运行程序时,可以
加上参数,例如: winsvr /RegServer 或者 winsvr -RegServer,这个是用来本地服务器注册
(Register as Local S Register as Service erver)。
其中winsvr / Service 或者 winsvr -Service,这个是服务的注册(Register as Service);
winsvr /UnRegServer 或者 winsvr -UnRegServer ,这个是服务的删除。
所以,当我们写好了服务程序,只要运行的时候加上参数 Service ,这个时候在SCM中就会看
到我们的服务了。
每次编码后测试都要在命令行中加参数运行服务才可以在SCM中列出来这样很麻烦,因此可
以采用如下方式来处理:选择VC IDE的菜单工程-> 设置, 再选择自定义组建面板(如下图所示)
在"$(TargetPath)" /RegServer的下面加上:"$(TargetPath)" /Service,这样当我们每次编码后编译
程序,就不用再在命令行中去加参数执行我们的服务程序完成服务的注册了。
同时通过界面我们也看到,向导为我们建立了一个类:CServiceModule,全局变量_Module就是这
个类的实例。
Init():这个函数用于完成一些初始化工作;
Run():这个函数就是服务开始运行后的内容,我们接下来要修改的内容也就是从这里入手。
Install():有如下一段代码
SC_HANDLE hService = ::CreateService(
hSCM, m_szServiceName, m_szServiceName,
ESS, SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
szFilePath, NULL, NULL, _T("RPCSS\0"), NULL, NULL);
注意:如果服务中启动的程序具有窗口(即具有交互功能则要求使用如下代码)
SC_HANDLE hService = ::CreateService(
hSCM, m_szServiceName, m_szServiceName,
ESS, SERVICE_WIN32_SHARE_PROCESS |
SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
szFi