昨天一个朋友想用做个短信网关,与移动TCP/IP通迅来完成短信的发送。并且想是用一个Windows服务来完成这个工作,但是又想让管理员能在客户端(浏览器端)对服务进行装载,卸载,启动,停止。我初步听了以后,觉得这个需求是可以完成的,服务这个项目的建立没有问题,控制服务这个项目也是没有问题的。于是就研究了一下,并去网上搜集了一些资料,整理了一个从技术角度相对完整的文档,拿出来给大家分享一下。
为了简化业务,这里就把与短信网关通信的需求改成每间隔一秒钟向一个txt文档写一个当前时间的需求。
我们先来看服务部分:
打开VS2008,“文件→新建→项目”,选择“Windows”项中的“Windows服务”,根据自己的情况修跑径和名称,这里的名称修为“WriteTextService”,确定后,出现一个“若要在类中添加组件,请从工具箱中拖出它们,然后例用”属性”窗口来设置它们的属性。若要为类创建方法和事件,请单击此处切换到代码视图。”的一个界面,我们如果处理业务逻辑,单击“单击此处切换到代码视图”,来转换到代码页。
代码
WriteTextService.cs
2
3
4
5
6
7
现在,我们还需要在服务中创建一个服务安装类,来完成服务初始化安装工作。
我们创建一个类ServiceInstall
ServiceInstall.cs
2
3
4
5
6
7
8
这样就完成了一个服务,关且有服务的描述,最要是通过重写父类Install和Uninstall来完成对服务描述的添加。因为服务都是在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/WriteTextService下有个项Description,给这个项添加数据就对应该服务的描述,所以Install和Uninstall两个方法本质上就是注册表英的添加与删除。
接下来我们看一下服务的操作,即装载,卸载,启动,停止。
我们新建一个web网站,只有一个Default.aspx页面,代码如下:
Default.aspx
Default.aspx.cs
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
我们是通过AssemblyInstaller类来完成对服务的装载和卸载,通过ServiceController类来完成对服务的启动和停止。
这样,我们就把服务和控制服务的代友做完整了。
(我的代码是在vista和vs2008下实现的。)