VBNet創(chuàng)建與安裝Windows服務(wù)_第1頁
VBNet創(chuàng)建與安裝Windows服務(wù)_第2頁
VBNet創(chuàng)建與安裝Windows服務(wù)_第3頁
VBNet創(chuàng)建與安裝Windows服務(wù)_第4頁
VBNet創(chuàng)建與安裝Windows服務(wù)_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、用VB.NET創(chuàng)建與安裝Windows服務(wù)一、引言:在Windows NT、Windows 2000、Windows XP等多任務(wù)操作系統(tǒng)中,常常需要運(yùn)行后臺(tái)操作的應(yīng)用程序,它們被稱為Windows服務(wù)(NT服務(wù))。由Windows服務(wù)執(zhí)行的任務(wù)一般不需要用戶界面(其控制臺(tái)界面除外),可由用戶手動(dòng)啟動(dòng)或隨計(jì)算機(jī)啟動(dòng),并在后臺(tái)持續(xù)運(yùn)行。像IIS、SQL Server以及很多反病毒軟件都使用Windows服務(wù)。二、Windows服務(wù)的特點(diǎn):1、Windows服務(wù)不依賴用戶登錄,可以在計(jì)算機(jī)啟動(dòng)時(shí)開始運(yùn)行,當(dāng)然也可以手工啟動(dòng)。2、Windows服務(wù)需要一個(gè)特定的安裝過程,使之運(yùn)行在特定的環(huán)境中,雙擊

2、編譯好的EXE文件無法運(yùn)行它。3、Windows服務(wù)一般沒有用戶界面,但可以有一個(gè)控制界面以操縱服務(wù)的啟動(dòng)、停止或設(shè)置參數(shù)。4、用戶可以通過“控制面板”“管理工具”“服務(wù)”來查看并管理系統(tǒng)中的Windows服務(wù),如圖1所示。三、創(chuàng)建Windows服務(wù):在.NET推出以前,Windows服務(wù)一般都用C+創(chuàng)建。雖然VB利用第三方工具集也可以創(chuàng)建Windows服務(wù),但線程和安裝的問題使開發(fā)人員多數(shù)不愿使用這種方式。在.NET中,上述復(fù)雜的操作都被封裝在.NET Framework類中,任何.NET語言都可以用于創(chuàng)建Windows服務(wù),且十分方便。創(chuàng)建Windows服務(wù)需要用到下面幾個(gè)類:l Syst

3、em.ServiceProcess.ServiceBase類:實(shí)現(xiàn)服務(wù)的基類,包含以下幾個(gè)重要事件。事件說明OnStart服務(wù)啟動(dòng)時(shí)發(fā)生,初始化代碼一般放在該事件中OnStop服務(wù)停止時(shí)發(fā)生,結(jié)束代碼放在該事件中OnContinue服務(wù)暫停后繼續(xù)運(yùn)行時(shí)發(fā)生OnPause服務(wù)暫停時(shí)發(fā)生OnShutdown關(guān)閉操作系統(tǒng)時(shí)發(fā)生l System.ServiceProcess.ServiceProcessInstaller類:用于服務(wù)的安裝,包含了服務(wù)安裝時(shí)所需要的一些必要信息。屬性說明Account運(yùn)行服務(wù)的帳戶類型,一般用最高權(quán)限的LocalSystem;如使用User,則必須提供用戶名和密碼Use

4、rname用戶名,如Account設(shè)為User則要用到本屬性Password密碼,如Account設(shè)為User則要用到本屬性l System.ServiceProecss.ServiceInstaller類:與安裝程序InstallUtil.exe交互,提供安裝所需的部分信息。屬性說明DisplayName顯示在Server Explorer中的名稱StartType服務(wù)的啟動(dòng)方式,可使用Autimatic(自動(dòng))、Manual(手動(dòng))下面,我們創(chuàng)建一個(gè)文件監(jiān)視Windows服務(wù)。給它指定一個(gè)目錄后,該服務(wù)能監(jiān)視目錄內(nèi)任何文件的新建、修改、更名、刪除等操作,并將信息寫入到系統(tǒng)事件日志中。用戶通

5、過“控制面板”“管理工具”“事件查看器”“應(yīng)用程序”即可了解上述信息。1、新建一“Windows服務(wù)”類型的工程,將該工程命名為FileWatcher。2、在“解決方案資源管理器”中,將默認(rèn)的Service1.vb更名為FileWatcher.vb;在“屬性”窗口中將(Name)和ServiceName屬性均改為FileWatcher。右擊工程,在“屬性”中將“啟動(dòng)對象”改為FileWatcher。3、在代碼設(shè)計(jì)器中,展開系統(tǒng)自動(dòng)生成的代碼,找到如下語句:ServicesToRun = New System.ServiceProcess.ServiceBase() New Service1()

6、將行末的Service1該為FileWatcher。4、接下來,在代碼設(shè)計(jì)器中加入如下代碼:Imports System.ServiceProcessImports System.IO引用命名空間Public Class FileWatcher Inherits System.ServiceProcess.ServiceBase#Region 組件設(shè)計(jì)器生成的代碼 Private MyFileSystemWatcher As New FileSystemWatcher Private MyEventLog As New EventLog 分別建立FileSystemWatcher類和Event

7、Log類的實(shí)例,MyFileSystemWatcher用于監(jiān)視指定目錄內(nèi)文件的變化,MyEventLog將事件信息寫入日志中 Protected Overrides Sub OnStart(ByVal args() As String) Dim f As String = C:WatcherDir.txt If File.Exists(f) Then Dim MyStreamReader As StreamReader = New StreamReader(f) MyFileSystemWatcher.Path = MyStreamReader.ReadLine MyStreamReader.

8、Close() Else MyFileSystemWatcher.Path = c: End If 若C:WatcherDir.txt文件存在則打開它,讀取并設(shè)置監(jiān)視目錄;否則監(jiān)視目錄設(shè)為C: MyFileSystemWatcher.NotifyFilter = NotifyFilters.CreationTime Or NotifyFilters.FileName Or NotifyFilters.LastWrite Or NotifyFilters.Size Or NotifyFilters.Attributes Or NotifyFilters.DirectoryName 要監(jiān)視目錄中的

9、哪些變化,可根據(jù)情況取舍組合 AddHandler MyFileSystemWatcher.Changed, AddressOf OnChanged AddHandler MyFileSystemWatcher.Created, AddressOf OnCreated AddHandler MyFileSystemWatcher.Deleted, AddressOf OnDeleted AddHandler MyFileSystemWatcher.Renamed, AddressOf OnRenamed 建立MyFileSystemWatcher的事件與處理過程的聯(lián)系 MyFileSystem

10、Watcher.EnableRaisingEvents = True 開始監(jiān)視服務(wù) MyEventLog.Log = Application 將消息寫入系統(tǒng)的Application事件日志 MyEventLog.Source = FileWatcher 表明寫消息的程序是FileWatcher End Sub Protected Overrides Sub OnStop() MyFileSystemWatcher.EnableRaisingEvents = False 停止監(jiān)視服務(wù) End Sub Private Sub OnCreated(ByVal sender As System.Obj

11、ect, ByVal e As System.IO.FileSystemEventArgs) MyEventLog.WriteEntry(e.FullPath & 被創(chuàng)建) End Sub Private Sub OnDeleted(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) MyEventLog.WriteEntry(e.FullPath & 被刪除) End Sub Private Sub OnRenamed(ByVal sender As System.Object, ByVal e A

12、s System.IO.RenamedEventArgs) MyEventLog.WriteEntry(e.OldFullPath & 被更名為 & e.FullPath) End Sub Private Sub OnChanged(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) MyEventLog.WriteEntry(e.FullPath & 被修改) End SubEnd Class5、下面為工程添加安裝信息。切換到FileWatcher的設(shè)計(jì)界面,右擊選擇“添加安裝程序”,系統(tǒng)會(huì)自動(dòng)創(chuàng)建

13、新組件ProjectInstaller1,并添加ServiceProcessInstaller1和ServiceInstaller1組件。將ServiceProcessInstaller1的Account屬性設(shè)為LocalSystem,ServiceInstaller1的DisplayName屬性改為FileWatcher,StartType屬性設(shè)為Manual。6、最后生成FileWatcher.exe。四、創(chuàng)建服務(wù)控制界面:我們可以通過“管理工具”中的“服務(wù)”程序來管理服務(wù),但更常見的方式是創(chuàng)建一個(gè)專門的控制界面來操縱服務(wù)。它是一個(gè)普通的Windows應(yīng)用程序,可以啟動(dòng)和停止服務(wù),還可向服

14、務(wù)傳遞設(shè)置參數(shù)。這需要用到ServiceController類,它位于System.ServiceProcess命名空間,使用前要添加對System.ServiceProcess.dll的引用。ServiceController類有以下常用方法、屬性:方法、屬性說明Start方法啟動(dòng)對應(yīng)的服務(wù)Stop方法停止對應(yīng)的服務(wù)Status屬性枚舉屬性,表示服務(wù)的狀態(tài)ServiceName屬性對應(yīng)服務(wù)的名稱以下為建立服務(wù)控制界面的步驟:1、 新建一“Windows應(yīng)用程序”類型的工程,命名為FileWatcherPanel,界面如圖2所示。2、 添加對System.ServiceProcess.dll的

15、引用,選擇“項(xiàng)目”“添加引用”。3、 在代碼設(shè)計(jì)器中添加如下代碼:Imports System.ServiceProcessImports System.IO引用命名空間Public Class Form1 Inherits System.Windows.Forms.Form#Region Windows 窗體設(shè)計(jì)器生成的代碼 Dim MyController As ServiceController Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load M

16、yController = New ServiceController(FileWatcher) 建立一個(gè)ServiceContrller類的實(shí)例MyController,用于控制FileWatcher服務(wù) TextBox1.Text = C: 默認(rèn)的監(jiān)視目錄 If MyController.Status = ServiceControllerStatus.Running Then Button1.Enabled = False Button2.Enabled = True Else Button1.Enabled = True Button2.Enabled = False End If 設(shè)

17、置按鈕的初始狀態(tài) End Sub Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim MyStreamWriter As StreamWriter = New StreamWriter(C:WatcherDir.txt) MyStreamWriter.WriteLine(TextBox1.Text) ServiceController類不能直接向服務(wù)傳遞字符串,故需要將監(jiān)視目錄信息寫入一個(gè)自定義的文件中,服務(wù)啟動(dòng)時(shí)打開此文件并獲得目錄 M

18、yStreamWriter.Close() Try MyController.Start() 啟動(dòng)FileWatcher服務(wù) Button1.Enabled = False Button2.Enabled = True Catch ex As Exception MsgBox(不能啟動(dòng)服務(wù)!) End Try End Sub Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click Try MyController.Stop() 停止FileWatcher服務(wù) Button1.Enabled = True Button2.Enabled = False Catch ex As Exception MsgBox(停止服務(wù)時(shí)發(fā)生異常!) End Try

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論