C#Windows服務(wù)程序開發(fā)的體會
C#Windows服務(wù)程序開發(fā)是如何的呢?本文將較為詳細(xì)的介紹如何在.net下開發(fā)Windows服務(wù)程序,并將簡要介紹一些開發(fā)中的調(diào)試技巧及后期的部署問題.
IDE:VS2005, DotNetFramework Version:2.0.50727
Windows服務(wù)程序開發(fā)的結(jié)果:Windows服務(wù)程序通常是一種在OS的后臺長期運行的程序,根據(jù)需要你可以設(shè)置為隨服務(wù)器啟動而同時啟動等等,在傳統(tǒng)的C/S結(jié)構(gòu)的程序開發(fā)中,Windows服務(wù)更是以Server端普遍存在.在.NET應(yīng)用程序中,無論是Winform下的應(yīng)用還是ASP.NET,Windows服務(wù)也都非常重要,比如我們可以把一個.Net Remoting服務(wù)端封裝在一個windows服務(wù)中,來達(dá)到穩(wěn)定提供服務(wù)的目的.
切入正題,首先我們來了解如何在VS下開發(fā)基于.Net的windows服務(wù).
實際上,在VS下建立一個windows服務(wù)程序非常的簡單,微軟幫我們做了80%的工作,我們所需要做的只是處理那20%的業(yè)務(wù)工作.
Windows服務(wù)程序開發(fā)首先,我們建立一個Windows Service程序,VS提供了現(xiàn)成的項目模版,選擇Files->New->Project->Windows->Windows Service
之后,你將獲得兩個文件Service組件和Program.cs.我們要建立服務(wù)的話,首先需要添加專用的安裝組件,這步同樣很簡單,選擇服務(wù)組件,并切換到設(shè)計模式,右鍵->Add Installer,生成了了安裝文件,切換到設(shè)計模式,這里你將看到兩個組件:ServiceInstaller和ProcessInstaller,這里沒有太多需要說明的,大部分是對服務(wù)的名稱,描述等信息的設(shè)置,只有2個地方需要注意下.一個是StartType,有三種選擇自動,手動,禁用.如果想要自動啟動,那么遍選擇Automatic即可.另一個需要注意的屬性是Account,選擇用戶,一般情況下,我們選擇Local System即可.
到現(xiàn)在,如果我們想要建立一個服務(wù),實際上已經(jīng)結(jié)束了,只需要在服務(wù)組件的OnStart和OnStop等函數(shù)中加上個人的業(yè)務(wù)處理.在Program.cs文件中,是如下代碼:
- static void Main()
- {
- ServiceBase[] ServicesToRun;
- // More than one user Service may run within the same process. To add
- // another service to this process, change the following line to
- // create a second service object. For example,
- //
- // ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};
- //
- ServicesToRun = new ServiceBase[]
- { new Service1() };
- ServiceBase.Run(ServicesToRun);
- }
這段代碼用于啟動服務(wù).
接下來的工作就是安裝服務(wù).你可以通過制作安裝包實現(xiàn),或者直接通過命令行來執(zhí)行安裝.
當(dāng)你編譯完項目后,你可以在bin/debug目錄下看到擴展名為.exe的可執(zhí)行文件,這就是服務(wù)程序,但直接雙擊是無法運行的,你需要通過特定的工具來安裝它,微軟提供給我們的工具就是installutil.exe.這個程序位于%SystemRoot%\Microsoft.NET\Framework\/%Version%\,version指的是.net版本號.
安裝一個服務(wù)程序,我們是在命令行內(nèi)鍵入:installutil.exe 服務(wù)程序路徑.如果是要刪除某個服務(wù)則是installutil.exe /u 服務(wù)程序路徑.
執(zhí)行了安裝操作后,我們?nèi)タ刂泼姘?>管理工具->服務(wù)中就可以看到我們的服務(wù)程序了.
Windows服務(wù)程序開發(fā)最后,談?wù)務(wù){(diào)試中的技巧.
編寫這種Windows服務(wù)程序,調(diào)試起來非常的麻煩,而且每次有所變化后,還得頻繁的去執(zhí)行installutil和installutil /u命令,實際上,我們可以通過編寫一些BuildEvents來大大簡化這其中的煩瑣工作.這里,我們在BuildEvents編寫如下事件:
- net stop YourServiceName
- copy /y "$(TargetDir)" "$(ProjectDir)bin"
- "%SystemRoot%\Microsoft.NET\Framework
- \v2.0.50727\InstallUtil.exe" /u $(ProjectDir)bin\$(TargetFileName)
- "%SystemRoot%\Microsoft.NET\Framework\
- v2.0.50727\InstallUtil.exe" $(ProjectDir)bin\$(TargetFileName)
- net start YourServiceName
Windows服務(wù)程序開發(fā)簡單解釋下:
停止當(dāng)前服務(wù)->把debug目錄下所有東西copy到bin目錄下->執(zhí)行反安裝操作->執(zhí)行安裝操作->啟動服務(wù).
最后把該事件設(shè)置為OnSuccessfulBuild即可.
由于是服務(wù)程序,如果想要直接debug比較的麻煩,可以通過附加進(jìn)程來調(diào)試大多數(shù)代碼,但是如果想要調(diào)試OnStart和OnStop方法.則只能通過其他的項目來調(diào)試.具體見這篇文章的介紹.
實際上,我們可以直接在OnStart()方法中通過EventLog.WriteEntry("Hi,I'm wiseman");來向事件查看器中寫入一些你感興趣的信息,很大程度上可以解決debug的問題.
以上大致的介紹了下如何在.net下編寫windows服務(wù)程序,以及一些相關(guān)的技巧.該文也是閱讀我之后的某些文章需要掌握的知識,這個月我會盡量抽些時間多寫幾篇有關(guān)Windows服務(wù)和企業(yè)服務(wù)以及Remoting技術(shù)綜合起來的應(yīng)用的文章。
C#Windows服務(wù)程序開發(fā)的相關(guān)介紹內(nèi)容就到這里,希望對你學(xué)習(xí)和了解C#Windows服務(wù)程序開發(fā)有所幫助。
【編輯推薦】