C#发现之旅:C#开发Windows Service程序(下)
2009-04-06 08:24:16 来源:WEB开发网Main函数决定调用本软件的那个功能模块,由于Main函数本身具有安装和卸载服务的功能,首先得找到微软.NET框架所带的InstallUtil.exe的完整的路径。微软.NET编程中,基础类型string属于mscorlib.dll,因此可以使用typeof(string).Assembly.CodeBase获得文件mscorlib.dll的绝对路径名,而InstallUtil.exe和mscorlib.dll是同一个目录的,因此也就能获得InstallUtil.exe的绝对路径名了。
我们使用System.Environment.GetCommandLineArgs()获得所有的命令行参数。遍历所有的参数,若存在“/install”则表示要安装服务,于是调用InstallUtil.exe来将软件本身注册为服务,若遇到“/uninstall”则调用InstallUtil.exe卸载服务,若遇到“/client”则调用客户端模块,若遇到“/debug”则创建服务对象,调用它的StartFileSystemWatching模拟启动服务,然后主线程阻塞掉,但此时文件系统监视的功能性模块还在运行,可以设置断点进行调试。
若没有遇到任何可识别的命令行参数,则调用ServiceBase.Run函数来执行服务。
由于向Windows系统注册自己为服务时没有指明任何命令行参数,因此服务管理器启动进程时不会添加任何命令行参数,因此本程序也就是以服务模式运行。若在Windows资源管理器中双击执行程序时也是以服务模式运行,此时没有相关的运行环境,程序启动后会报错。此时必须添加程序代码可识别的命令行参数。
运行软件
程序编写完毕,编译通过,生成一个MyWindowsService.exe文件,我们就可以开始运行这个软件了。
首先我们得向系统注册服务,我们可以使用命令行“程序路径/MyWindowsService.exe /install”来注册服务,也可以直接运行“微软.NET框架路径/installutil.exe 程序路径/MyWindowsService.exe”;相反的,我们可以使用命令行“程序路径/MyWindowsService.exe /uninstall”或者“微软.NET框架路径/installutil.exe /u 程序路径/MyWindowsService.exe”来卸载服务。
安装服务后,我们可以使用命令行“程序路径/MyWindowsService.exe /client”来运行该服务的客户端软件了。
小结
在本课程中,我们使用C#编写了一个简单的用于监视文件系统的Windows服务,包括服务器软件和客户端软件,若使用传统的C++开发服务这种底层程序需要熟悉大量的API函数,而微软.NET框架很好的封装了这些技术细节,简化了编程过程,使得我们可以把主要警力放在提供服务内容的功能性模块的开发上来,从这里可以看出基于微软.NET框架是可以低成本的开发出一些功能强大的软件。
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››发现数据库对象的依赖关系
- ››开发一个自己的HTML在线编辑器(一)
- ››开发一个自己的HTML在线编辑器(二)
- ››开发者在App Store上赚的钱比在Android Market上多...
- ››开发者应深入学习的10个Android开源应用项目
- ››开发移动 Web Ajax 应用
- ››开发者眼中的iPhone与Android
更多精彩
赞助商链接