.Net下的Windows服務程式開發指南.

來源:互聯網
上載者:User

最近一個月都異常的繁忙,項目進度非常的緊,回頭看看自己的blog,整整一個5月都沒有一篇文章,非常慚愧,現在補幾篇文章,介紹一下我最近關注的技術.這篇文章將介紹Windows服務程式的開發.
摘要:
本文將較為詳細的介紹如何在.net下開發Windows服務程式,並將簡要介紹一些開發中的調試技巧及後期的部署問題.
IDE:VS2005, DotNetFramework Version:2.0.50727

Windows服務程式通常是一種在OS的後台長期啟動並執行程式,根據需要你可以設定為隨伺服器啟動而同時啟動等等,在傳統的C/S結構的程式開發中,Windows服務更是以Server端普遍存在.在.NET應用程式中,無論是Winform下的應用還是ASP.NET,Windows服務也都非常重要,比如我們可以把一個.Net Remoting服務端封裝在一個windows服務中,來達到穩定提供服務的目的.

切入正題,首先我們來瞭解如何在VS下開發基於.Net的windows服務.
實際上,在VS下建立一個windows服務程式非常的簡單,微軟幫我們做了80%的工作,我們所需要做的只是處理那20%的業務工作.
首先,我們建立一個Windows Service程式,VS提供了現成的項目模版,選擇Files->New->Project->Windows->Windows Service

之後,你將獲得兩個檔案Service組件和Program.cs.我們要建立服務的話,首先需要添加專用的安裝組件,這步同樣很簡單,選擇服務元件,並切換到設計模式,右鍵->Add Installer,產生了了安裝檔案,切換到設計模式,這裡你將看到兩個組件:ServiceInstaller和ProcessInstaller,這裡沒有太多需要說明的,大部分是對服務的名稱,描述等資訊的設定,只有2個地方需要注意下.一個是StartType,有三種選擇自動,手動,禁用.如果想要自動啟動,那麼遍選擇Automatic即可.另一個需要注意的屬性是Account,選擇使用者,一般情況下,我們選擇Local System即可.

到現在,如果我們想要建立一個服務,實際上已經結束了,只需要在服務元件的OnStart和OnStop等函數中加上個人的業務處理.在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);
        }

這段代碼用於啟動服務.

接下來的工作就是安裝服務.你可以通過製作安裝包實現,或者直接通過命令列來執行安裝.

當你編譯完項目後,你可以在bin/debug目錄下看到副檔名為.exe的可執行檔,這就是服務程式,但直接雙擊是無法啟動並執行,你需要通過特定的工具來安裝它,微軟提供給我們的工具就是installutil.exe.這個程式位於%SystemRoot%\Microsoft.NET\Framework\/%Version%\,version指的是.net版本號碼.
安裝一個服務程式,我們是在命令列內鍵入:installutil.exe  服務程式路徑.如果是要刪除某個服務則是installutil.exe /u 服務程式路徑.
執行了安裝操作後,我們去控制面版->管理工具->服務中就可以看到我們的服務程式了.

 

最後,談談調試中的技巧.
編寫這種服務程式,調試起來非常的麻煩,而且每次有所變化後,還得頻繁的去執行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
簡單解釋下:
停止當前服務->把debug目錄下所有東西copy到bin目錄下->執行反安裝操作->執行安裝操作->啟動服務.
最後把該事件設定為OnSuccessfulBuild即可.

由於是服務程式,如果想要直接debug比較的麻煩,可以通過附加進程來調試大多數代碼,但是如果想要調試OnStart和OnStop方法.則只能通過其他的項目來調試.具體見這篇文章的介紹.http://leonkim.bokee.com/1857046.html
實際上,我們可以直接在OnStart()方法中通過EventLog.WriteEntry("Hi,I'm wiseman");來向事件檢視器中寫入一些你感興趣的資訊,很大程度上可以解決debug的問題.

本文到此結束,大致的介紹了下如何在.net下編寫windows服務程式,以及一些相關的技巧.該文也是閱讀我之後的某些文章需要掌握的知識,這個月我會盡量抽些時間多寫幾篇有關Windows服務和企業服務以及Remoting技術綜合起來的應用的文章.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.