C# VS 2010創建、安裝、調試 windows服務(windows service)


1.創建 windows服務 項目
  文件 -> 新建項目 -> 已安裝的模板 -> Visual C# -> windows ,在右側窗口選擇"windows 服務"

2.系統已經為我們建立了一個 Service1.cs 組件,測試時我們就用它了.
 如果要新件的話,右鍵項目 -> 添加 -> 新建項 -> windows 服務。

3.在 Service1.cs 上 ,按 F7 (右鍵查看代碼),打開代碼頁。加入我們測試用的代碼。
  注意:下面的幾個方法中的 str 變量,為了我們一會兒調試時設置斷點用的!

 1  using System;
 2  using System.Diagnostics;
 3  using System.ServiceProcess;
 4 
 5  namespace WindowsService1
 6  {
 7   public partial class Service1 : ServiceBase
 8   {
 9    public Service1()
10    {
11     InitializeComponent();
12     InitService();
13    }
14 
15    /// <summary>
16    /// 初始化服務參數
17    /// </summary>
18    private void InitService()
19    {
20     base.AutoLog = false;
21     base.CanShutdown = true;
22     base.CanStop = true;
23     base.CanPauseAndContinue = true;
24     base.ServiceName = "Service1";  //這個名字很重要,設置不一致會產生 1083 錯誤哦(在文章最后會說到這個問題)!
25    }
26    protected override void OnStart(string[] args)
27    {
28     string str ="服務開啟";
29    }
30 
31    protected override void OnStop()
32    {
33     string str ="服務停止";
34    }
35    protected override void OnContinue()
36    {
37     string str ="服務繼續運行";
38     base.OnContinue();
39    }
40    protected override void OnPause()
41    {
42     string str ="服務暫停";
43     base.OnPause();
44    }
45   }
46  }

 

4.建立服務的“安裝程序”
4.1 雙擊”Service1.cs“,打開 Service1.cs 的視圖設計器
4.2 在視圖設計器中任意位置右鍵,選擇”添加安裝程序“ 
4.3 這時項目跟目下將出現一個 ProjectInstaller.cs 的組件
    (如果是第一次添加”安裝程序“的話)
4.4 雙擊 ProjectInstaller.cs 打開 ProjectInstaller  的視圖設計器
4.5 找到 serviceInstaller1 組件,選中后按 F4 鍵,設置組件屬性。
  Description=“測試服務1”;
  DisplayName=“Service1”;
  ServiceName=“Service1”;//這個值必須和 WindowsService1.InitService() 方法下設置的 base.ServiceName 屬性一至。
  StartType 為服務運行類型,根據你的需要設置即可。(Manual:手動啟動,AutoMatic 為自動啟動)
4.6 找到 serviceProcessInstaller1 組件,選中后按 F4 鍵,設置組件屬性。
  Account=“LocalSystem”; //設置為其他的屬性在開啟服務時,會提示輸入用戶名和密碼
4.7 這樣就完成了一個服務的所有准備,下面就是安裝和測試工作。

5.生成組件
 右鍵項目,選擇“生成”。

6.安裝組件
6.1 使用 InstallUtil.exe 工具注冊組件服務,文件位置在不同版本的 framework 中。我用的是 4.0 所以在一下位置
 C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe
6.2 打開生成目錄,如果生成成功會有一個 WindowsService1.exe 文件
6.3 在生成目錄根目錄下新加兩個 bat(批處理文件),用於安裝和卸載服務
  新建一個文本文件,打開文件加入以下兩行命令
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe D:\WindowsService1.exe
  pause
  保存后關閉文本文件,之后將其重命名為“安裝服務.bat”文件,注意要修改后綴名為 .bat!

  再新建一個文本文件,打開文件加入以下兩行命令
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u D:\WindowsService1.exe
  pause
  保存后關閉文本文件,之后將其重命名為“卸載服務.bat”文件,注意要修改后綴名為 .bat!
6.4 “安裝服務.bat”文件,安裝windows 服務

7.安裝成功后需要手動開啟服務,因為我們剛設置 serviceInstaller1.StartType 為 Manual
 打開windows 服務管理器,找到名為 Service1 的服務,右鍵屬性。點擊【啟動】按鈕

8.windows 調試
8.1 回到開發環境,選擇調試->附加到進程,勾選”顯示所有用戶進程“
8.2 找到 WindowsService1.exe 進程(如果沒有點擊下刷新按鈕),選中后點擊“附加到進程”按鈕。
8.3 選中 Service1.cs 文件,后按 F7 打開代碼視圖
8.4 在所有 str 變量上添加調試斷點
8.5 回到windows服務管理器,找 Service1 服務並選中它,在左側有一個“暫停”按鈕。點擊一下
  這時,OnPause 方法下的斷點命中!OK 達到了調試的目的了

9.如果想一次安裝多個服務,需要按照 2~5 的步驟多添加幾個服務就好了!
 
--------------------------------------------------------------------------------------
問題及解決方案
注冊成功后,啟動 Windows服務 時遇到錯誤:1083 的解決辦法
1.查看 Main() 方法中是否啟動了指定的服務

1  ServiceBase[] ServicesToRun;
2  ServicesToRun = new ServiceBase[]
3  {
4   new Service1(),
5   new Service2() //如果建立多個服務需要添加這段代碼
6  };
7  ServiceBase.Run(ServicesToRun);

 


2.確保 ProjectInstaller.cs 視圖設計器中的 serviceInstaller1 組件的 ServiceName 屬性
  與 Service1.cs 組件的 ServiceName 屬性一致


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM