C#建立Windows服務與安裝
當我們做專案的時候,經常會遇到一種情況就是:需要隔一段時間就執行某些操作,比如資料庫統計,刪除多餘的檔案防止專案佔用很多空間等等。
下面通過一個小demo來說明Windows服務與安裝。
1–> 建立專案
2–> 右鍵點選Service1.cs,檢視程式碼, 用於編寫操作邏輯程式碼。邏輯程式碼包括兩個部分,OnStart和OnStop。我們主要修改的是OnStart中的內容,即:服務開啟之後執行的邏輯
3 –> 由於我們需要每隔一段時間就執行一次,一般使用timer,便於隔一段事件執行一回,在程式碼中新增一個timer,並實現timer的Elapsed事件。主要程式碼:
private System.Timers.Timer myTimer;//timer
/// <summary>
/// 重寫服務OnStart方法
/// </summary>
/// <param name="args"></param>
protected override void OnStart(string[] args)
{
myTimer = new System.Timers.Timer();
myTimer.Interval = 60000 ; //設定計時器事件間隔執行時間
myTimer.Elapsed += (timer1_Elapsed);
myTimer.Enabled = true;
}
/// <summary>
/// 重寫服務OnStop方法
/// </summary>
protected override void OnStop()
{
}
/// <summary>
/// timer
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
DoWork();
}
catch (Exception ex)
{
}
}
//邏輯程式碼
void DoWork()
{
}
至此,邏輯部分程式碼基本就寫完了。
4 –> 建立安裝服務。雙擊解決方案中Service1,開啟檢視設計器。
5 –> 在檢視內【右鍵】——-【新增安裝程式】。專案中添加了ProjectInstaller.cs檔案,該檔案中檢視自動會新增倆個元件
serviceProcessInstaller1
serviceInstaller1
6 –> 選中serviceProcessInstaller1元件,檢視屬性,設定account為LocalSystem
7 –> 選中serviceInstaller1元件,檢視屬性
設定ServiceName的值, 該值表示在系統服務中的名稱
設定StartType, 如果為Manual則手動啟動,預設停止,如果為Automatic為自動啟動
設定Description,新增服務描述
ServiceName:該值表示在系統服務中的名稱 。即紅色框中的部分,這個值不能為空,否則在系統服務中找不到(以前做服務一不小心就這樣了).
設定Description,新增服務描述:
讓後就可以生成專案,準備安裝了。
8 – > 安裝服務。
a . 執行cmd,獲取命令提示符win7需要已管理員的身份啟動,否則無法安裝
b . 由於demo的框架使用的是4.5的,所以輸入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回車
切換當前目錄,此處需要注意的是,在C:\Windows\Microsoft.NET\Framework目錄下有很多類似版本,具體去哪個目錄要看專案的執行環境,例 如果是.net framework2.0則需要輸入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
c . 輸入 InstallUtil.exe E:…\TestServert.exe 回車
說明:E:…\TestServer.exe表示專案生成的exe檔案位置
開啟服務,就可以看到已經安裝的服務了
9 – >解除安裝服務
解除安裝很簡單,開啟cmd, 直接輸入 sc delete TestServer便可.刪除服務的時候,E:…\TestServert.exe這個路徑必須存在,否則會刪除不成功。
10 – > 服務的除錯:
也就是說VS中不能直接除錯windows服務。除錯方法:
a. 通過附加到程序除錯(在網上查到過,不過沒試過)
b . 建立另外的專案,單獨除錯服務中的方法,即demo中 DoWork()方法,測試方法的正確性。
c . 直接安裝服務,執行,通過日誌來判斷服務的執行狀況。
比較喜歡的是b c 兩種方法聯合起來使用。