Win服务程序编写以及安装一般步骤
Win服务程序编写以及安装一般步骤
Windows服务的优点有:1. 能够自动运行。2. 不要求用户交互。3. 在后台运行。本文将介绍常见服务程序编写的一般步骤以及注意事项。
设计服务程序实例:
- 创建服务程序,主要功能:隔段时间自动写入字符串到文本文档中。
使用语言:VB.Net,开发工具:Visual Studio 2010
- 新建服务项目
如图1所示:
图1
-
添加组件
操作如图2,得到如图3结果
图2
图3
System.windows.forms中的time组件在服务程序中部适用,所以此处要选择system.timers.timer。继续图3操作后设置timer以及service1的属性.如图4/5。
图4
图5
- 程序编写
图6
代码如下:
1 Protected Overrides Sub OnStart(ByVal args() As String) 2 3 ' 请在此处添加代码以启动您的服务。此方法应完成设置工作, 4 5 ' 以使您的服务开始工作。 6 7 Timer1.Start() 8 9 End Sub 10 11 12 13 Protected Overrides Sub OnStop() 14 15 ' 在此处添加代码以执行任何必要的拆解操作,从而停止您的服务。 16 17 Timer1.Stop() 18 19 End Sub 20 21 22 23 Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed 24 25 Dim witer As StreamWriter = New StreamWriter("C:\string.txt", True) 26 27 witer.WriteLine("YourText") 28 29 witer.Close() 30 31 End Sub
或者基于filestream写入,代码如下:
1 Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed 2 3 Static i As Integer = 1 4 5 Dim fstream As New FileStream("G:\string.txt", FileMode.OpenOrCreate, FileAccess.Write) 6 7 Dim write As New StreamWriter(fstream) 8 9 fstream.Seek(1, SeekOrigin.End) 10 11 write.Write("MyTestService" & i.ToString) 12 13 write.Close() 14 15 fstream.Close() 16 17 i += 1 18 19 End Sub
- 服务程序安装
图7
图7操作后出现如图8界面,设置安装控件属性如图9和图10
图8
图9
图10
.net编写服务程序集成了许多的功能,此处创建服务安装,并不需要编写程序,只需添加控件,修改属性即可,十分方便。
- 编译生成
编译会出现警告,如图11,但程序没出先错误,查看C:\出现”string.text”文档,里面写入了文本。
图11
- 安装及卸载
启动vs命令提示符窗口。如图12
图12
安装
注意要以管理员身份运行
Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security。解决办法,以管理员身份运行即可。
输入代码:
InstallUtil C:\Users\h\Desktop\timetest_WindowsService\timetest_WindowsService\bin\Debug\timetest_WindowsService.exe
图13
卸载
installutil/u C:\Users\h\Desktop\timetest_WindowsService\timetest_WindowsService\bin\Debug\timetest_WindowsService.exe
图14
默认情况下,Windows服务基于安全考虑,是不允许任何服务程序和桌面进行交互的。也就是说,使用任何的Windows Form 的很多特性将会莫名奇妙的不起作用,如进行messageBox的显示,启动另一进程,诸如:打开某个pdf格式的文件,者使用System.Windows.Form.Timer对象也不行,这种不起作用表现在没有进行服务程序安装的情况下调试的时候会提示无法启动服务需要安装的警告,但是 messageBox仍会显示,pdf格式的文档仍会打开;奇怪的是,在安装后,启动服务程序后,messageBox以及pdf格式的文档均不会打,开程序将没任何的响应。由于Windows服务具有难以调试的特点,如果不注意这点,你反复检查自己的代码,都很难发现问题的所在的。
但也并不是说不能编写复杂的交互式服务程序,只是涉及到的知识会更复杂一些,通常会用涉及到一些Windows API接口的操作。本文旨在说明服务程序编写的一般步骤,对于复杂的交互服务程序,其一般流程大致相同,网上已有大神在此有详细的解释说明。可参考博客:http://www.cnblogs.com/gnielee/archive/2010/04/08/session0-isolation-part2.html,里面有很详细的介绍。