NET編寫簡單的Windows 服務應用程序

 

創建服務

創建並配 置服務

  1. “文件” 菜 單上單擊“新建項目”

    打開“新建項目” 對 話框。

  2. 在 Visual C#項目模板的列表中選擇“Windows 服務” 項目,並將其命名爲 MyNewService 。單擊“確定”

    說 明:

    項目模板自動添加從 System.ServiceProcess. . :: . ServiceBase 繼承的名爲 Service1 的組件類。

  3. 單擊設計器選擇 Service1 。然後,在“屬性” 窗口中,將 Service1ServiceName“(名稱)” 屬性設置爲“MyNewService”

  4. AutoLog 屬性設置爲 true

  5. “視圖” 菜單中單擊“代碼” 以打開代碼編輯器。編輯 Main 方法以創建“MyNewService” 的實 例。當在步驟 3 中重命名服務時,未在 Main 方法中修改類名。在 Visual C# 應用程序中,Main 方法分別位於 Program.cs 和 Program.js 文件中。

    C#
        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 服務的組件類型的示例。有關自定義事件日誌的更多信息,請參見如何:創建和移除自定義 事件日誌

將自定義事件日誌功能添加到服務中

  1. “解決方案資源管理器” 中,右擊“Service1.cs” ,並選擇“視圖設計器”

  2. “工具箱”“組件” 選項卡,將 EventLog 組件拖到設計器中。

  3. “解決方案資源管理器” 中,右擊“Service1.cs” ,並選擇“查看代碼”

  4. 編 輯構造函數以定義一個用戶事件日誌。

    C#
        public
     MyNewService()
    {
    InitializeComponent();
    if (!System.Diagnostics.EventLog.SourceExists("MySource" ))
    {
    System.Diagnostics.EventLog.CreateEventSource(
    "MySource" ,"MyNewLog" );
    }
    eventLog1.Source = "MySource" ;
    eventLog1.Log = "MyNewLog" ;
    }

定義服務啓動時發生的情 況

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

    C#
        protected
     override void
     OnStart(string
    [] args)
    {
    eventLog1.WriteEntry("In OnStart" );
    }
    說 明:

    服務應用程序設計爲長時間運行。因此,它通常輪詢或監視系統中的情況。監視是在 OnStart 方法中設置的。但是,OnStart 實際上不進行監視。服務的操作開始之後,OnStart 方法必須返回到操作系統。它不能始終循環或阻止。若要設置簡單的輪詢機制,可以使用 System.Timers. . :: . Timer 組件。在 OnStart 方法中,可以設置組件上的參數,然後將 Enabled 屬性設置爲 true 。 然後,計時器將在代碼中週期性地引發事件,此時,服務可以進行其監視工作。

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

  • 在 代碼編輯器中,從“方法名稱” 下拉列表中選擇 OnStop 過程,該過程在創建項目時已自動重寫。編寫代碼以確定服務停止時發生的情況:

    C#
        protected
     override void
     OnStop()
    {
    eventLog1.WriteEntry("In onStop." );
    }

還可以重寫 OnPauseOnContinueOnShutdown 方法來定義對組件的其他處理。

定義服務的其他操作

  • 對於要處理的方法,重寫適當的方法並定義要發生的情況。

    下面的代碼顯示重 寫 OnContinue 方法時代碼的情況:

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

安裝 Windows 服務時必須執行某些自定義操作,這可以由 Installer 類來完成。Visual Studio 可以專門爲 Windows 服務創建這些安裝程序並將它們添加到項目中。

爲服務創建安裝程序

  1. “解決方案資源管理器” 中,右擊“Service1.cs” , 並選擇“視圖設計器”

  2. 單擊設計器的背景以選擇服務本身,而不是它的 任何內容。

  3. 設計器具有焦點時,右擊然後單擊“添加安裝程序”

    默 認情況下,向您的項目添加一個包含兩個安裝程序的組件類。將該組件命名爲 ProjectInstaller , 它包含的安裝程序分別是服務的安裝程序和服務關聯進程的安裝程序。

  4. “ProjectInstaller”“設計” 視圖中,單擊“ServiceInstaller1”“serviceInstaller1”

  5. “屬 性” 窗口中,將 ServiceName 屬性設置爲“MyNewService”

  6. StartType 屬性設置爲 Automatic

  7. 在 設計器中單擊“ServiceProcessInstaller1” 。將 Account 屬性設置爲 LocalService 。 這將使得在本地服務帳戶上安裝和運行該服務。

    安全說明:

    LocalService 帳戶用作本地計算機上的非特權用戶,向任何遠程服務器顯示匿名憑據。使用其他帳戶時需要特別小心,因此它們具有較高的特權,會增加您受到惡意代碼攻擊的風 險。

生成服務項目

  1. “解決方案資源管理器” 中,右擊您的項目,然後單擊“屬性” 。 出現項目的“屬性設計器”

  2. 從“應用程序”頁的“啓動對象” 列表中單擊“MyNewService”

  3. 按 Ctrl+Shift+B 生成項目。

生成項目後,便可以對其進行部署了。安裝項目將安裝已編譯的項目 文件並運行要運行 Windows 服務所需的安裝程序。若要創建完整的安裝項目,您必須將項目輸出“MyNewService.exe” 添 加到安裝項目,然後添加自定義操作來安裝“MyNewService.exe”

爲服務創建安裝項目

  1. “解決方案資源管理器” 中,右擊選擇解決方案,指向“添加” , 然後單擊“新建項目”

  2. “項目 類型” 窗格中選擇“安裝和部署項目” 文件夾。

  3. “模板” 窗格中選擇“安裝項目” 。將項目命名爲 MyServiceSetup 。單擊“確定”

    安 裝項目隨即添加到解決方案。

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

向安裝項目添加 MyNewService.exe

  1. “解決方案資源管理器” 中,右擊“MyServiceSetup” ,指向“添加” ,然後單擊“項目輸出”

    出現“添加項目輸出組” 對話 框。

  2. 並且在“項目” 框中選擇了“MyNewService”

  3. 在 列表中,選擇“主輸出” ,再單擊“確定”

    MyNewService 的主輸出的項目項被添加到安裝項目中。

現 在添加自定義操作以安裝 MyNewService.exe 文件。

向安裝項 目添加自定義操作

  1. “解決方案資 源管理器” 中右擊安裝項目,指向“視圖” ,再選擇“自 定義操作”

    出現“自定義操作” 編輯器。

  2. “自定義操作” 編輯器中右擊“自定義操作” 節點,再單擊“添加自定義操作”

    出現“選擇項目中的項” 對 話框。

  3. 在列表中雙擊“應用程序文件夾” 以將其打開,選擇“MyNewService 的主輸出(活動)” ,再單擊“確定”

    主 輸出被添加到自定義操作的所有四個節點:“安裝”“提交”“回滾”“卸載”

  4. “解決方案資源管理器” 中,右擊“MyServiceSetup” 項 目並選擇“生成”

安裝 Windows 服務

  1. 若 要安裝“MyNewService.exe” ,請右擊“解決方案資 源管理器” 中的安裝項目,再選擇“安裝”

  2. 完成“安裝嚮導” 中的步驟。生成並保存您的解決方案。

啓動和停止服務

  1. 通 過執行下列操作之一打開“服務控制管理器”:

    • 在 Windows XP 和 2000 專業版中,在桌面上右擊“我的電腦” ,然後單擊“管理” 。在“計算機管理” 控制檯中,展開“服務和應用程序” 節點。

      - 或 -

    • 在 Windows Server 2003 和 Windows 2000 Server 中,單擊“開始” ,指向“程序” ,單擊“管理工具” ,然後單擊“服務”

      說 明:

      在 Windows NT 4.0 版中,可以從“控制面板”中打開此對話框。

    現 在應該看到“MyNewService” 列在窗口的“服務” 區 域中。

  2. 從列表中選擇您的服務,右擊該服務,然後單擊“啓動”

  3. 右 擊該服務,再單擊“停止”

驗證服務的事件日誌輸出

  1. 打 開“服務器資源管理器” 並訪問“事件日誌” 節點。

    說 明:

    Visual Studio 標準版中不提供“Windows 服務” 模板及相關功能。

  2. 找到 MyNewLog 的列表並展開它。您應該看到服務所執行操作的項。

卸載服務

  1. “開始” 菜單上打開“控制面板” 並單擊“添加或刪除程序” ,然後找到您的服務並單擊“卸載”

  2. 還 可以通過右擊 .msi 文件的程序圖標並選擇“卸載” 來卸載該程序。

    說 明:

    如果服務是安裝在 Windows 2000 上的,則必須重新啓動系統才能重新安裝服務。在 Windows 2000 中,服務在系統重新啓動之前不會完全刪除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章