建立 Windows 服務應用程式

來源:互聯網
上載者:User

本文改編自MSDN

在組件設計器中建立 Windows 服務應用程式

1、建立並佈建服務

在[檔案] 功能表上指向“建立”,然後單擊“項目”。
“建立項目”對話方塊開啟。

在Visual C# 項目模板的列表中選擇“Windows 服務”項目,並將其命名為 MyNewService。
注意   項目模板自動添加一個繼承自 System.ServiceProcess.ServiceBase 的名為 Service1 的組件類。
單擊設計器以選擇 Service1。然後,在“屬性”視窗中,將 Service1 的 ServiceName 屬性設定為 MyNewService。
將 AutoLog 屬性設定為 true。
在“視圖”菜單中,選擇“代碼”以開啟代碼編輯器。編輯 Main 方法以建立 MyNewService 的執行個體。當在步驟 3 中重新命名服務時

,未在 Main 方法中修改類名。

static void Main()
{
   System.ServiceProcess.ServiceBase[] ServicesToRun;
   // Change the following line to match.
   ServicesToRun = new System.ServiceProcess.ServiceBase[]
      { new MyNewService() };
   System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
下面把自訂事件記錄添加到 Windows 服務中。事件記錄與 Windows 服務沒有任何形式的關聯。此處,EventLog 組件用作可以添

加到 Windows 服務的組件類型的樣本。

2、將自訂事件記錄功能添加到服務中

在方案總管中,右擊Service1.cs,並選擇“視圖設計器”。
在工具箱的“組件”選項卡中,將 EventLog 組件拖到設計器。
在方案總管中,右擊 Service1.cs,並選擇“查看代碼”。
編輯建構函式以定義一個使用者事件記錄。

public MyNewService()
{
   InitializeComponent();
   if (!System.Diagnostics.EventLog.SourceExists("MySource"))
   {        
      System.Diagnostics.EventLog.CreateEventSource(
         "MySource","MyNewLog");
   }
   eventLog1.Source = "MySource";
   eventLog1.Log = "MyNewLog";
}
3、定義當服務啟動時發生的情況

在代碼編輯器中,找到建立項目時被自動重寫的 OnStart 方法,並編寫代碼來確定當服務開始運行時發生的情況:

protected override void OnStart(string[] args)
{
   eventLog1.WriteEntry("In OnStart");
}
注意   服務應用程式設計為長時間運行。因此,它通常輪詢或監視系統中的情況。監視是在 OnStart 方法中設定的。但是,

OnStart 實際上不進行監視。一旦服務的操作開始,OnStart 方法必須返回到作業系統。它不能始終迴圈或阻塞。若要設定簡單的輪

詢機制,可以使用 System.Timers.Timer 組件。在 OnStart 方法中,設定組件上的參數,然後將 Timer.Enabled 屬性設定為 true

。然後,計時器將在代碼中周期性地引發事件,此時,服務可以進行其監視工作。

4、定義當服務停止時發生的情況

在代碼編輯器中,找到建立項目時被自動重寫的 OnStop 過程,並編寫代碼來確定當服務停止時發生的情況:

protected override void OnStop()
{
   eventLog1.WriteEntry("In onStop.");
}
還可以重寫 OnPause、OnContinue 和 OnShutdown 方法來定義對組件的進一步處理。

5、定義服務的其他動作

對於要處理的方法,重寫適當的方法並定義要發生的操作。
下面的代碼顯示重寫 OnContinue 方法時代碼的情況:

protected override void OnContinue()
{
   eventLog1.WriteEntry("In OnContinue.");

某些自訂動作需要在安裝 Windows 服務時發生,這可以由 Installer 類來完成。Visual Studio 可以專門為 Windows 服務建立

這些安裝程式並將它們添加到項目中。

6、為服務建立安裝程式

返回到 Service1 的“設計”視圖。
單擊設計器的背景以選擇服務本身,而不是它的任何內容。
在“屬性”視窗中,單擊屬性列表下麵灰色地區中的“添加安裝程式”連結。
預設情況下,向您的項目添加包含兩個安裝程式的組件類。將該組件命名為 ProjectInstaller,它包含的安裝程式分別是服務的安

裝程式和服務關聯進程的安裝程式。

訪問 ProjectInstaller 的“設計”視圖,然後單擊“ServiceInstaller1”。
在“屬性”視窗中,將 ServiceName 屬性設定為 MyNewService。
將 StartType 屬性設定為 Automatic。
在設計器中,選擇 ServiceProcessInstaller1(針對 Visual Basic 項目),或 serviceProcessInstaller1(針對 Visual C# 項

目)。將 Account 屬性設定為 LocalService。這將使得在本地服務帳戶上安裝和運行該服務。有關更多資訊,請參見

ServiceProcessInstaller.Account 屬性。
安全記事   LocalService 帳戶用作本機電腦上的非特權使用者,向任何遠程伺服器顯示匿名憑據。使用其他帳戶時需要特別小心,

因此它們具有較高的特權,會增加您受到惡意代碼攻擊的風險。

7、產生服務項目

在方案總管中,右擊您的項目並從捷徑功能表中選擇“屬性”。出現項目的“屬性頁面”對話方塊。
在左邊的窗格中,選擇“通用屬性”檔案夾中的“常規”選項卡。
從“啟始物件”列表中,選擇 或 MyNewService.MyNewService。單擊“確定”。
按 CTRL+SHIFT+B 產生項目。
產生項目後,便可以對其進行部署了。安裝項目將安裝已編譯的專案檔並運行要運行 Windows 服務所需的安裝程式。若要建立完

整的安裝項目,您需要將項目輸出 MyNewService.exe 添加到安裝項目,然後添加自訂動作來安裝 MyNewService.exe。有關安裝

項目的更多資訊,請參見安裝項目。有關自訂動作的更多資訊,請參見演練:建立自訂動作。

8、為服務建立安裝項目

在[檔案] 功能表上指向“添加項目”,然後選擇“建立項目”。
在“項目類型”窗格中選擇“安裝和部署項目”檔案夾。
在“模板”窗格中選擇“安裝項目”。將項目命名為 MyServiceSetup。
安裝項目隨即添加到解決方案。

然後,將 Windows 服務項目的輸出 MyNewService.exe 添加到安裝項目中。

9、向安裝項目添加 MyNewService.exe

在方案總管中,右擊“MyServiceSetup”,指向“添加”,然後選擇“項目輸出”。
出現“添加項目輸出組”對話方塊。

在“項目”框中選擇“MyNewService”。
在列表框中,選擇“主輸出”,然後單擊“確定”。
MyNewService 的主輸出的項目項被添加到安裝項目中。現在添加自訂動作以安裝 MyNewService.exe 檔。

10、向安裝項目添加自訂動作

在方案總管中右擊安裝項目,指向“視圖”,然後選擇“自訂動作”。
出現自訂動作編輯器。

在“自訂動作”編輯器中右擊“自訂動作”節點,然後選擇“添加自訂動作”。
出現“選擇項目中的項”對話方塊。

在列表框中雙擊“應用程式檔案夾”將其開啟,選擇“主輸出來自 MyNewService(活動)”,然後單擊“確定”。
主輸出被添加到自訂動作的所有四個節點,即“安裝”、“提交”、“復原”和“卸載”。

在方案總管中,右擊 MyServiceSetup 項目並選擇“產生”。

11、安裝 Windows 服務

若要安裝 MyEventLog.exe,請右擊方案總管中的安裝項目,並選擇“安裝”。

12、啟動和停止服務

通過執行下列操作之一開啟服務控制管理員:
在 Windows 2000 Professional 中,在案頭上右擊“我的電腦”,然後單擊“管理”。在“電腦管理”控制台中,展開“服務和

應用程式”節點。
- 或 -

在 Windows 2000 Server 中,單擊“開始”,指向“程式”,單擊“管理工具”,然後單擊“服務”。
注意   在 Windows NT 4.0 版中,可以從控制台中開啟該對話方塊。
現在應該看到 MyNewService 列在視窗的“服務”地區中。

從列表中選擇您的服務,右擊該服務,然後單擊“啟動”。
右擊該服務,然後單擊“停止”。

13、驗證服務的事件記錄輸出

開啟伺服器總管並訪問“事件記錄”節點。有關更多資訊,請參見在伺服器總管中處理事件記錄。

找到 MyNewLog 的列表並展開它。您應該看到服務所執行操作的項。
14、卸載服務

在“開始”菜單上,開啟“控制台”並單擊“添加或刪除程式”,然後找到您的服務並單擊“刪除”。
還可以通過右擊 .msi 檔案的程式表徵圖並選擇“卸載”來卸載該程式。
注意   如果是在 Windows 2000 上安裝了服務,則必須重新啟動系統後才能重新安裝服務。在 Windows 2000 中,服務在系統重新

啟動之前不會完全刪除。

下一步
也可以利用 ServiceController 組件將命令發送到已安裝的服務。

可以在安裝應用程式時使用安裝程式建立事件記錄,而不是在運行應用程式時建立事件記錄。此外,在卸載應用程式時,事件記錄將被安裝程式刪除。

聯繫我們

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