用C#開發Windows服務、自動安裝註冊)

來源:互聯網
上載者:User

部分一(Windows服務初探,對於服務安裝部分,如果看不明白,不要強看,直接看部分二):

第一步:

  首先開啟Visual Studio並且選擇Visual C#工程。選擇模板類型為Windows服務,並命名為Monitoring,如所示:

 

  第二步:

  按F7鍵開啟代碼視窗。然後,加入對System.IO命名空間的引用,以便把系統定時功能編寫到一個檔案中。下一步,用Monitoring一詞替換所有出現的Service1一詞。之後,轉入設計模式(按鍵shift+F7)。選擇Solution Explorer(按鍵Ctrl+Alt+L)。點擊Service1.cs並且命名它為Monitoring.cs。

  之後,轉入代碼視窗。在OnStart事件中加入下列代碼,如所示:

  在OnStart事件中實現的功能

  首先,在c盤上建立一個xml檔案,並命名為file1。然後,在這個檔案中建立如下代碼:

 

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<times>

  然後,關閉它。

  我建立了一個服務,它能夠在系統啟動時自動啟動並且記錄下啟動時間。當系統關閉時,它也關閉。而且,它會記錄下關閉時間和系統中所花費的時間。

  首先,我要建立一個StreamWriter來把系統啟動時間寫入file1.xml檔案中。

  在把代碼複製到你的OnStart事件後,正好在Monitoring構造器的上面建立一個公開變數temp,如所示:

 

  此後,把這部分代碼複製到你的代碼視窗: 

  再把下面代碼複製到OnStart事件中,如所示:

 

StreamWriter writer=File.AppendText("d:\\file1.xml");
writer.Write("<time>");
writer.WriteLine("<Date> "+ (DateTime.Now.ToString("dd-MM-yy"))+"</Date>");
writer.WriteLine("<started> "+ (DateTime.Now.ToString("t"))+"</started>");
temp=DateTime.Now; 
writer.Close();

  在OnShutdown事件中實現的功能

  當系統要關閉時,我使用一個StreamWriter再次開啟file1.xml-它將記下系統關閉時間,還將記下在系統啟動和關閉之間所花費的時間跨度。我在OnStart和OnShutdown事件中使用了一個temp變數。在OnStart中,它用於儲存啟動時間。然後,它被再次用於OnShutdown事件中來記下系統啟動和關閉之間所花費的時間間隔。

  然後,我們必須配置我們的Windows服務以便安裝和運行。

  因此,首先轉到設計檢視中,並選擇屬性視窗(可以按下F4)。

  把CanStop和CanShutdown設定為true。在安裝之前,我們必須要安裝一個安裝程式。

  右擊設計檢視視窗,然後選擇"Add Installer"。然後,它將顯示ProjectInstaller.cs。在這個檔案中,serviceInstaller1和serviceProcessInstaller1都存在。轉到serviceProcessInstaller1屬性處:

  ・ 把Account設定為LocalSystem。

  ・ 然後,轉到serviceInstaller1屬性處。

  ・ 把DisplayName和ServiceName設定為Monitoring。

  ・ 設定啟動類型(StartType)為automatic。

  請參考:

 

  然後,轉到VS.NET的命令提示字元下。

  在控制台下,轉到服務的Debug檔案夾下:

  輸入"InstallUtil Monitoring.exe"

  如果它顯示"Commit Phase Completed Successfully",則說明服務被成功安裝。

  然後,重啟系統以啟動服務。在重啟之後,開啟file1.xml檔案,它記錄了系統的開始時間。如果關閉系統,它將記錄下系統的關閉時間和使用系統的時間長度。通過這一部分,我們已經完成了記錄下系統所消耗的時間。接下來,我們將建立一個web應用程式以便在一個Grid控制項中顯示xml數

部分二(Windows服務安裝與註冊):

最近一直在搞Windows服務,也有了不少經驗,感覺許可權方面確定比一般程式要受限很多,但方便性也很多。像後台運行不阻塞系統,不用使用者登入之類。哈哈,扯遠了,今天講一下那個怎麼給Windows服務做個安裝包。為什麼做安裝包?當然是方便了,不用每次調用InstallUtil,還有,就是看上去正規些。

不多說了,先來看看怎麼做吧。首先,當然是建立一個Windows服務的項目。這個大家應該都知道怎麼做(這都不明白的留言問我),然後要給服務“添加安裝程式”,1所示:(這一步和自己用InstallUtil註冊是完全一樣的)

(圖1)

添加後,會出來一個serviceProcessInstal1,還有serviceInstaller1,如果你一個項目裡有兩個服務的話,這裡就會有兩個serviceInstaller類,2:

(圖2)

圖3是serviceProcessInstal1的屬性頁面,其中Account就是指用於運行服務的帳戶,如果只是用於本地,可以選LocalSystem(本地系統),這是本地的最高許可權,並可以選擇和案頭互動功能。如果安全性考慮的話,請選擇適合自己的。

(圖3)

圖4是serviceInstaller2的屬性頁面,其中DisplayName就是顯示在Windows服務管理員中的服務名稱,Desciption是服務的說明。下面ServiceName是服務內部名稱。最關鍵的是下面的StartType,是指服務的啟動方式,是自動,手動和禁用三種。


(圖4)

下面,就是今天講的重點了,點擊“檔案”->“添加”->“建立項目”(5)

(圖5)

選擇“其他項目類型”->“安裝和部署”裡的“安裝項目”(6)

(圖6)

建好項目後,右鍵剛才建立的安裝項目,選擇“視圖”->“檔案系統”(7)

(圖7)

這時,開啟了檔案系統屬性。可以看到,螢幕左邊,出現了三項檔案系統的內容,因為我們是Windows服務程式,不需要在開始菜單和案頭上放置表徵圖,所以我們直接右鍵“應用程式檔案夾”->“添加”->“項目輸出”(8)

(圖8)

在出來的對話方塊中,選擇“主輸出”和“Release XXX”,這個由你的項目屬性決定,一般選擇Release Any CPU。(9)

(圖9)

系統會自動把項目輸出檔案,也就是Windows服務程式的EXE檔案和所有引用的類庫檔案都列在中間的框中。這時,為了方便安裝,我們把InstallUtil.exe和兩個我自己寫的批次檔一起添加進去。添加方法類似上面,只是把“項目輸出”改成“檔案”。
結果10所示:

(圖10)

接下來,就該配置一下安裝過程,讓安裝程式自動給我們安裝和卸載Windows服務。

還是右鍵安裝項目,選“視圖”->“自訂動作”,11:

(圖11)

左邊的視窗換到了自訂動作的視圖了,右鍵“安裝”->“添加自訂動作”(圖12),出現的對話方塊中,選中“應用程式檔案夾”,再選中其中的InstallUtil.exe檔案(圖13),添加好後,會在安裝操作下面多出一個InstallUtil.exe的分支。點一下它,在右邊的屬性頁面裡,設定Arguments=“ 你的Windows服務檔案名稱”,14(注意檔案名稱前要留一個空格)

(圖12)


(圖13)


(圖14)

同樣,在提交和卸載處,也添加InstallUtil.exe,不過屬性頁面中設定Arguments=“ -u 你的Windows服務檔案名稱”,這樣,安裝程式就能實現自動安裝註冊和卸載Windows服務了。(15)

(圖15)

接下來就該讓Windows服務和安裝項目同時被編譯了。右鍵點擊解決方案,選擇“屬性”(16),在出來的對話方塊中,勾上安裝項目後面的產生。(17)

(圖16)


(圖17)

最後,右鍵解決方案,選擇“產生解決方案”,這時vs會將兩個項目都會編譯出來。不過要注意一點:項目的啟動順序一定要Windows服務項目在前,安裝項目在後。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.