http://xk861119.blog.163.com/blog/static/16327042010109102237317/
建立一个服务程序的最简单的方法是用VC中的ATL COM向导。主菜单中选择新建,然后选Projects中的ATL COM AppWizard,输入一个项目名,选择了所在目录后,点OK按钮,在出现的对话框中选择Service(EXE),点Finish即可。然后编译生成WinServer.exe。
用下面语句在命令提示符下进行安装
sc create WinServer binPath= "G:\01.MyProgram\WinServer\Bin\WinServer.exe" (binPath= 的后面有一个空格,我当时就郁闷了半天,后面就是.exe文件的所在路径)
安装以后 在启动总是提示:"错误1053:服务没有及时响应启动或控制请求。"
我后来重新在命令提示符下用下面的语句注册
G:\01.MyProgram\WinServer\Bin\WinServer.exe /RegServer
重新后安装以后 在启动还是提示:"错误1053:服务没有及时响应启动或控制请求。"
然后我在源码的每个函数里面添加了MessageBox弹出窗口作为调试信息,重新编译,重新注册、安装,怀着忐忑的心情等待着,可是等了半天,没有蹦出半个对话框,最终憋出一个还是:"错误1053:服务没有及时响应启动或控制请求。"
我失望的继续在网上查了一天的资料也没找到原因,再后来无意间找到了一个帖子,他的描述和我碰到的问题一样,当时真是太激动了,赶紧收起失望的心情,试一把,他的解决办法是:
在project--->setting---->build中 把command中的
"$(TargetPath)" /RegServer
修改成
"$(TargetPath)" /Service
这次在编译的过程中就有很多的调试对话框弹出来,而且不需要再用上面的安装命令,在Windows服务已经安装了我编写的服务,一看心里高兴死了,这回终于有出路了,满怀信心的启动服务,我眼睛直勾勾的盯着进度条,过了一半多一点点,还没有弹出我预期的调试对话框,而且和以前一样停住了,我知道接下来会发生什么了,"错误1053:服务没有及时响应启动或控制请求。"的对话框再一次无情的弹了出来。
我想放弃了,但是理论上告诉我,不可能,别人的服务都能跑,为啥偏偏我的就不行呢,我继续在网上查找资料,黄天不负有心人,我又找到了一个帖子,按照其提供的方法解决了我的问题,按照下列步骤操作:
- 服务工具中单击想要启动,服务,然后单击 属性。
- 用鼠标右键单击 登录 选项卡,然后单击以选中 允许服务与桌面交互 复选框。
- 单击 确定 退出 属性 对话框。
我启动服务,终于弹出了预期的对话框,服务启动成功。
我总结了一下,因为我在启动的过程中有对话框弹出,所以后面设置“允许服务与桌面交互”是必须的。我把调试对话框删除之后,用 "$(TargetPath)" /Service 的方法也是可以成功启动的。