用托管C++编写Windows服务
会想为什么要添加一个安装程序呢?难道不可以自动添加吗?实际上,如果是使用VB或C#,是可以自动添加的,而C++却不行。
服务过程安装程序只有一个比较让人感兴趣的属性:服务所运行的账户。单击serviceProcessInstaller1选择它,打开其属性窗口。默认情况下,账户属性为User,这意味着在安装服务时,将会提示输入一个ID和密码,而且服务将会运行于user权限下--这在服务运行于system账户时非常有用。通常有三个选项:LocalSystem是服务被安装于未运行Windows 2003的电脑上时的唯一选择;如果服务是面向Windows 2003的,那么LocalService的权限更少,因为是更好的选择;而NetworkService允许服务验证另一台电脑,所以只在需要使用它(例如,一个服务加载了一个web页),相反,在使用公共web服务时,就不需要作为NetworkService运行,因为它不需验证远程电脑。 现在,可以生成服务,并准备安装了。打开Visual Studio命令提示符,定位到工程的Debug文件夹,输入以下命令: InstallUtil CGNotifier.exe 以下是屏幕的输出:
这真是难以理解,不是吗?在C++中编写可验证代码向来都是不可能的,且非常难以实现。为什么工程向导创建了一个服务,但却没有提示你代码必须为可验证的呢?其实不必使你的服务程序产生可验证代码。 打开解决方案资源管理器,找到并打开相应的 .cpp文件,你将会发现隐藏在此的一个main()函数--正是这个main()函数以一种"聪明"的方式为你调用了InstallUtil,并产生了整个的"可验证代码"问题。现在回到命令提示符窗口,像以下这样安装服务: CGNotifier.exe -Install 你可看到服务轻松、流畅地安装上去了。 为进行测试,现在打开"计算机管理",并展开"服务和应用程序"项,选择"服务",你可看到新安装上去的服务:右键单击它选择启动。一旦服务启动,切换回Visual Studio,选择服务器资源管理器查看此服务:依次选择视图、服务器资源管理器,展开你的计算机名,再展开服务,你将看到一个新服务,而带有的绿色三角形表明它正在运行。 在服务器资源管理器中右击此服务,选择停止。现在,请在"事件查看器"中查看事件记录,可看到二个日志记录:一个告诉你服务已启动,而另一个告诉你服务已停止。如果你不想产生事件日志记录,请在服务的设计视图中修改AutoLog属性为False。 卸载服务 如果你从Debug目录中安装此服务,在对它进行修改期间,并不需要卸载,把它停止,重新生成,再启动就行了。但是,如果你想卸载它,请回到Visual Studio命令提示符窗口,定位到Debug目录,输入以下命令: CGNotifier.exe -Install /u 现在,服务就会从"服务器资源管理器"和"计算机管理"的服务列表中消失了,也许,需要刷新列表才能看到变化。 唤醒后做一些事情 当然,以上所示的服务到目前为止并不能做任何事情,为把它变成一个"在设定时刻唤醒"的服务,第一步应在工程中加入一个配置文件,示例如下:
另外,还需要复制带应用程序名如app.config文件到目标工程目录(Debug或Release): copy app.config $(Configuration |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |