Win服務程式編寫以及安裝一般步驟 Windows服務的優點有:1. 能夠自動運行。2. 不要求用戶交互。3. 在後臺運行。本文將介紹常見服務程式編寫的一般步驟以及註意事項。 設計服務程式實例: 使用語言:VB.Net,開發工具:Visual Studio 2010 新建服務項目 如圖1所示: 圖1 ...
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,裡面有很詳細的介紹。