概括VB.NET OnStart處理方法
VB.NET還是比較常用的,于是我研究了一下VB.NET OnStart處理方法,在這里拿出來和大家分享一下,希望對大家有用
有時候,處于業務的需要,我們要不斷的監視文件的變化,比如文件的創建、刪除、重命名等;而且某些人要確保重要文件的只讀,并且要及時的報告文件版本的變更情況。或者,你想監視你的文件夾被別人更改、肆意刪除而又不知道是誰干的,在什么時候干的?于是你就考慮要寫一個監視程序,“偷偷的”記錄文件夾被操作的情況。
有些人采取常規的方式,即寫一個桌面應用程序,其界面可能是隱藏的。采用每隔一個事件片段讀取文件信息,然后寫到一個log文件中。然后設置系統啟動的事件自動加載程序,(好像很多人是這樣竊取QQ密碼的:)。其缺點:
1、不是連續的獲取信息,因為他們采用了 Timer的tick事件;
2、在NT系統中,可能要一定的權限才可以運行,比如要管理員身份等。還有系統中會有進程顯示,顯然很容易shut down.
我們建議的方案:采用.NET的Windows Service。首先可以克服以上缺點,而且較VB6的編程而言,.NET中寫windows service一如反掌。
思路:在.NET創建的服務中調用System.IO.FileSystemWatcher對象,每次被監視的文件或者文件夾變化的時候,調用IO系統的FileStream和StreamWriter把變更信息寫到log文件中。
Windows服務,是一些長久運行的程序,而并不需要依靠登錄用戶或客戶程序來保持它的運行。它們沒有自己的用戶界面,可以在它們自己獨有的安全級別和會話上下文中運行。我們比較熟悉的Windows服務范例包含了從打印池到SQL服務器以及它的分布式事務協作(DTC)。服務只可以運行在NT、2000以及后繼產品比如XP下運行,它們通過Microsoft Management Console (MMC)提供了一個專門的管理界面(開始->運行->Services.msc)。
在.NET中創建項目的時候,有一個Windows服務的模板,選擇新建。這個操作自動為我建立了一個新的類,它是繼承了.NET內建了System.ServiceProcess.ServiceBase類。同時它提供給我一個可視化的設計器,一個圖形化的快速開發工具,它特別的為那些本身沒有用戶界面的工程。我可以點擊這個設計器,設定我的服務的名字(我命名為"File Watching")。
當啟動某項服務時,系統將定位相應的可執行文件,并運行該服務的 VB.NET OnStart處理方法(它包含在可執行文件內)。但是,運行服務與運行可執行文件并不相同。可執行文件僅加載服務。服務則通過“服務控制管理器”訪問(例如啟動和停止)。
當***在服務上調用“開始”時,可執行文件將調用 ServiceBase 派生類的構造函數。在構造函數執行之后將立即調用 VB.NET OnStart處理方法。在服務***加載之后,構造函數不會再次執行,因此有必要將構造函數執行的處理和 OnStart執行方法的處理分開。可以由 OnStop 釋放的任何資源都應在 OnStart 中創建。如果服務在 OnStop 釋放資源后再次啟動,那么,在構造函數中創建資源會妨礙這些資源的正確創建。
“服務控制管理器”(SCM) 提供與服務交互的方式,可以使用 SCM 將“開始”(Start)、“停止”(Stop)、“暫停”(Pause)、“繼續”(Continue) 或自定義命令傳遞到服務中。SCM 使用 CanStop 和 CanPauseAndContinue 的值,決定服務是否接受“停止”、“暫停”或“繼續”命令。僅當服務類中相應的屬性 CanStop 或 CanPauseAndContinue 為 true 時,才會在 SCM 的上下文菜單中啟用“停止”、“暫停”或“繼續”。如果已啟用,則相應的命令將傳遞到服務,并且調用 OnStop、OnPause 或 OnContinue。如果 CanStop、CanShutdown 或 CanPauseAndContinue 為 false,則即使已實現相應的命令處理方法(如 OnStop),也不會予以處理。
【編輯推薦】