1. 程式人生 > >WindowsService服務程式開發

WindowsService服務程式開發

 Windows服務:Microsoft Windows 服務(即,以前的 NT服務)使您能夠建立在它們自己的 Windows 會話中可長時間執行的可執行應用程式。這些服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何使用者介面。這使服務非常適合在伺服器上使用,或任何時候,為了不影響在同一臺計算機上工作的其他使用者,需要長時間執行功能時使用。還可以在不同於登入使用者的特定使用者帳戶或預設計算機帳戶的安全上下文中執行服務。(摘自百度百科)

一:建立

二:屬性

VS自動建立了一個Service1.cs的檔案:

點選F4,檢視各個屬性的含義:

Autolog                 是否自動寫入系統的日誌檔案

CanHandlePowerEvent     服務時候接受電源事件

CanPauseAndContinue          服務是否接受暫停或繼續執行的請求

CanShutdown 服務是否在執行它的計算機關閉時收到通知,以便能夠呼叫 OnShutDown 過程

CanStop                              服務是否接受停止執行的請求

ServiceName                       服務名稱

三:功能

點選F7檢視Service1.cs的原始碼:

預設實現了OnStart和OnStop兩個方法。

以向一個文字檔案中寫入資料操作為例:

複製程式碼

   public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 服務啟動
        /// http://www.cnblogs.com/babycool
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            string start = string.Format("{0}-{1}",DateTime.Now.ToString("yyyyMMddHHmmss"),"程式啟動了。");
            Log(start);
        }

        /// <summary>
        /// 服務停止
        /// http://www.cnblogs.com/babycool
        /// </summary>
        protected override void OnStop()
        {
            string start = string.Format("{0}-{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), "程式停止了。");
            Log(start);
        }

        /// <summary>
        /// 系統關閉
        /// http://www.cnblogs.com/babycool
        /// </summary>
        protected override void OnShutdown()
        {
            string start = string.Format("{0}-{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), "電腦關閉了。");
            Log(start);
        }

        /*
        /// <summary>
        /// 服務暫停
        /// http://www.cnblogs.com/babycool
        /// </summary>
        protected override void OnPause()
        {
            
        }
        */

        /*
        /// <summary>
        /// 服務繼續
        /// </summary>
        protected override void OnContinue()
        {
            base.OnContinue();
        }
        */
        /*
        /// <summary>
        /// 系統電源狀態改變
        /// </summary>
        /// <param name="powerStatus"></param>
        /// <returns></returns>
        protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
        {
            return base.OnPowerEvent(powerStatus);
        }
        */


        void Log(string str)
        {
            string path = "E://def/6.txt";
            using (StreamWriter sw = File.AppendText(path))
            {
                sw.WriteLine(str);
            }
        }

    }

複製程式碼

四:安裝程式

切換到 Service1.cs[設計] 介面,右擊選擇“新增安裝程式”。

這時專案中就添加了一個新類 ProjectInstaller 和兩個安裝元件 ServiceProcessInstaller 和 ServiceInstaller。

選中“serviceInstaller1” 控制元件,F4開啟屬性面板,

Description       服務程式的描述資訊

DisplayName     服務程式顯示的名稱

StartType        指定如何啟動服務      

                    Manual      服務安裝後,必須手動啟動

                    Automatic    每次計算機重新啟動時,服務都會自動啟動

                    Disabled     服務無法啟動

選中“serviceProcessInstaller1” 控制元件,F4開啟屬性面板:

將serviceProcessInstaller類的Account屬性改為 LocalSystem。

這樣,不論是以哪個使用者登入的系統,服務總會啟動。

五:生成

右擊 專案 選擇生成 ,不能通過F5來直接執行服務專案。

六:安裝解除安裝服務

選擇 VS元件 “Visual Studio命令提示(2010)” 工具,並以“管理員身份執行"(win7、win8系統下)。

注意:這裡必須選擇“以管理員身份執行”,否則會報錯。

  

從命令列執行 Installutil.exe 目錄  命令,以專案中的已編譯可執行檔案所在的目錄作為引數,安裝服務:

因為Installutil.exe程式預設在Windows\System32\目錄下,需要通過cmd命令 "cd" 切換目錄。

從命令列執行 Installutil.exe /u 目錄   命令來解除安裝服務:

安裝服務: installutil.exe E:\XTestDemo\X_15_WindowsService\bin\Debug\X_15_WindowsService.exe

解除安裝服務: installutil.exe /u E:\XTestDemo\X_15_WindowsService\bin\Debug\X_15_WindowsService.exe

七:檢視服務狀態

在“計算機管理”中,服務 下可以看到剛剛安裝的Service服務(cmd命令:services.msc---本地服務設定):

預設是停止狀態。右擊,選擇“啟動”,即可開啟服務。

通過“屬性”,可以檢視到更詳細的資訊。

轉載請註明出處。

相關參考: