天天看點

Windows Services的安裝部署 三種方法總結

Windows服務的安裝方法總結

C#建立Windows服務與安裝-圖解

百度經驗:jingyan.baidu.com

一、第一種安裝方法

使用.net framework自帶的安裝服務的程式進行安裝

建立項目1

建立windows服務項目

Windows Services的安裝部署 三種方法總結

右鍵點選Service1.cs,檢視代碼, 用于編寫操作邏輯代碼

Windows Services的安裝部署 三種方法總結

代碼中OnStart用于執行服務事件,一般采用線程方式執行方法,便于隔一段事件執行一回

Windows Services的安裝部署 三種方法總結

安裝服務配置

打開Service1.cs視圖界面

Windows Services的安裝部署 三種方法總結

在視圖内右鍵-->添加安裝程式

Windows Services的安裝部署 三種方法總結

項目中添加了ProjectInstaller.cs檔案,該檔案中視圖自動會添加倆個元件

serviceProcessInstaller1

serviceInstaller1

Windows Services的安裝部署 三種方法總結

選中serviceProcessInstaller1元件,檢視屬性,設定account為LocalSystem

Windows Services的安裝部署 三種方法總結

選中serviceInstaller1元件,檢視屬性

設定ServiceName的值, 該值表示在系統服務中的名稱

設定StartType, 如果為Manual則手動啟動,預設停止,如果為Automatic為自動啟動

設定Description,添加服務描述

Windows Services的安裝部署 三種方法總結

安裝服務1

點選 開始,運作中輸入cmd,擷取指令提示符

win7需要以管理者的身份啟動,否則無法安裝

Windows Services的安裝部署 三種方法總結

輸入 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

Windows Services的安裝部署 三種方法總結

輸入InstallUtil.exe E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe回車

說明:E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe表示項目生成的windowsservice主輸出檔案位置

Windows Services的安裝部署 三種方法總結

打開服務,就可以看到已經安裝的服務了

Windows Services的安裝部署 三種方法總結

解除安裝服務:1

解除安裝很簡單,打開cmd, 直接輸入 sc delete WinServiceTest便可

第二中安裝方法

使用windows批處理方法進行安裝

1.服務項目完成之後,在服務解決方法中建立一個windows批處理檔案命名為:InstallService.bat

Windows Services的安裝部署 三種方法總結

檔案中的内容書寫如下:

@echooff

echo--------------------------------------------------------------

echo-          開始安裝服務         -

echo--------------------------------------------------------------           

pause

set appdir=%cd%\SimulateHexiaoWindowsService.exe

setAddr=C:\Windows\Microsoft.NET\Framework\v2.0.50727

cd/d %Addr%

installutil.exe %appdir%

IFERRORLEVEL 255 GOTO Label255

IFERRORLEVEL 254 GOTO Label254

IFERRORLEVEL 1 GOTO Label1

GOTOLabel0

:Label255

echocommands to be executed at errorlevel 255

GOTOEnd

:Label1

echocommands to be executed at errorlevel 1

GOTOEnd

:Label0

echo--------------------------------------------------------------

echo-          成功安裝服務

echo-------------------------------------------------------------- 

pause

:End

1.      建立一個解除安裝服務的windows批處理檔案 命名為:

UnInstallService.bat

Windows Services的安裝部署 三種方法總結

@echooff

echo--------------------------------------------------------------

echo-         開始解除安裝服務

echo--------------------------------------------------------------           

pause

setappdir=%cd%\SimulateHexiaoWindowsService.exe

setAddr=C:\Windows\Microsoft.NET\Framework\v2.0.50727

cd/d %Addr%

installutil.exe /u %appdir%

IFERRORLEVEL 255 GOTO Label255

IFERRORLEVEL 254 GOTO Label254

IFERRORLEVEL 1 GOTO Label1

GOTOLabel0

:Label255

echocommands to be executed at errorlevel 255

GOTOEnd

:Label1

echocommands to be executed at errorlevel 1

GOTOEnd

:Label0

echo--------------------------------------------------------------

echo-         成功解除安裝服務

echo-------------------------------------------------------------- 

pause

:End

注意:此處需要注意的同樣如一方法中所說,如果建立的服務項目架構是.Net framework 2.0的則要把批處理檔案中的設定改為setAddr=C:\Windows\Microsoft.NET\Framework\v2.0.50727如果是.Netframework 4.0的話,這要修改為set Addr=C:\Windows\Microsoft.NET\Framework\v4.0.30319,本質上該方法和第一種方法是一樣的。

三、使用vs的安裝項目的安裝方法來安裝

     1.建立window服務項目

首先我們建一個window服務項目 :解決方案(右擊)——>增加 ——>建立項目——>項目類型選擇Windows——>模闆選擇Windows服務

      2.編寫Window服務程式

建立後會生成兩個檔案 Program.cs和Service1.cs,其中 program.cs這個檔案不用動,裡面已自動生成好了。我們在Service1.cs裡增加所要的操作,裡面有兩個重寫方法 OnStart和 OnStop,OnStart方法表示服務啟動的操作,OnStop表示服務停止的操作,下面寫了一個簡單示例 :當服務啟動後,調用遠端一個WebService的Hello函數,并把傳回的值寫入到一個檔案中。code如下:

/// <summary>

        /// 服務啟動的操作

        /// </summary>

        /// <param name="args"></param>

        protected override void OnStart(string[] args)  

        {

            Start ();

        }

        /// <summary>

        /// 服務停止的操作

        /// </summary>

        protected override void OnStop()

        {

            try

            {

                ThreadHello.Abort();

                Flag = false;

                System.Diagnostics.Trace.Write("線程停止");

            }

            catch (Exception ex)

            {

                System.Diagnostics.Trace.Write(ex.Message);

            }

        }

        private Thread ThreadHello;

        private void Starto()

        {

            try

            {

                // 标準形式

                //ThreadStart NewThreadStart = new ThreadStart(VoidName);

                //Thread NewThead = new Thread(NewThreadStart);

                //NewThead.Start();

                ThreadHello = new Thread(new ThreadStart(Hello));

                ThreadHello.Start();

                System.Diagnostics.Trace.Write("線程任務開始");

            }

            catch (Exception ex)

            {

                System.Diagnostics.Trace.Write(ex.Message);

                throw ex;

            }

        }

        private void Hello()

        {

            while (Flag)

            {

                localhost.AdvService la = new WindowsService1.localhost.AdvService();

                try

                {

                    string helloname = la.Hello("Andy"); // 調用遠端WebService中的方法

                    writeInLog(helloname, false);   // 把調用傳回的資料寫入到檔案中

                }

                catch (Exception ex)

                {

                    System.Diagnostics.Trace.Write(ex.Message);

                    throw ex;

                }

                Thread.Sleep(5000);

            }

        }

        /// <summary>

        /// 寫入檔案操作

        /// </summary>

        /// <param name="msg">寫入内容</param>

        /// <param name="IsAutoDelete">是否删除</param>

        private void writeInLog(string msg, bool IsAutoDelete)

        {

            try

            {

                string logFileName = @"E:\Sample\PG_Sample\log.txt"; // 檔案路徑

                FileInfo fileinfo = new FileInfo(logFileName);

                if (IsAutoDelete)

                {

                    if (fileinfo.Exists && fileinfo.Length >= 1024)

                    {

                        fileinfo.Delete();

                    }

                }

                using (FileStream fs = fileinfo.OpenWrite())

                {

                    StreamWriter sw = new StreamWriter(fs);

                    sw.BaseStream.Seek(0, SeekOrigin.End);

                    sw.WriteLine("=====================================");

                    sw.Write("添加日期為:" + DateTime.Now.ToString() + "\r\n");

                    sw.Write("日志内容為:" + msg + "\r\n");

                    sw.WriteLine("=====================================");

                    sw.Flush();

                    sw.Close();

                }

            }

            catch (Exception ex)

            {

                ex.ToString();

            }

        }

例子很簡單,友善了解,上面通過線程,每5秒執行一次操作,到這裡,我們的服務以及服務實作的功能就已經寫好了,下面怎麼讓用戶端安裝我們的服務呢?這裡才是我寫這篇文章的目的!先要增加一個安裝程式類,切換到視圖視窗,右擊——>增加安裝程式,便會增加一個程式安裝類檔案ProjectInstaller.cs。

這裡serviceProcessInstaller1和 serviceInstaller1有幾個重要屬性要設定,serviceInstaller1中的StartType要設定成Automatic,表示随機啟動,ServiceName表示服務名稱,Description表示服務的描述, DisplayName表示顯示名稱。serviceProcessInstaller1中的Account要設定成LocalSystem,表示本地系統帳号

       3.安裝程式

       安裝程式制作:解決方案(右擊)——>增加 ——>建立項目 ——>項目類型選擇安裝和部署——>  模闆選擇安裝項目  如圖 :

Windows Services的安裝部署 三種方法總結

    建立後,安裝項目(右擊)——>視圖 ——>檔案系統如圖:

Windows Services的安裝部署 三種方法總結

由于我們是安裝服務,就不需要使用者桌面和程式菜單了,直接應用程式檔案夾(右擊)——>增加 ——>項目輸出 入圖 :

Windows Services的安裝部署 三種方法總結
Windows Services的安裝部署 三種方法總結

上面有兩點需要注意 ,一 項目選擇中選擇要安裝的服務, 二 項目選擇下面要選擇主輸出,選擇好後确定,這一步增加了安裝程式的檔案夾,下一步就是給這個安裝程式增加操作,這裡我們增加兩個基本操作,一個是安裝,一個是解除安裝。安裝項目(右擊) ——>視圖 ——> 自定義操作 如圖

Windows Services的安裝部署 三種方法總結

上面可以看到有安裝,送出,復原,解除安裝等操作,我們先增加安裝操作,安裝(右擊)——>增加自定義操作,會彈出一個對話 如圖:

Windows Services的安裝部署 三種方法總結

選擇應用程式檔案夾,并選中之前增加的主輸出項,确定,這樣這個安裝程式就增加了安裝的操作,同樣按照這樣的方式增加解除安裝操作,解除安裝與安裝唯一不同的是需要設定一個指令參數,不可少,如圖:

Windows Services的安裝部署 三種方法總結

這裡 Arguments裡輸入 /u 表示解除安裝指令相當于InstallUtil.exe /u 服務路徑  ,到這裡 ,我們的安裝程式就已經制作好了,生成安裝程式項目,将會生成 setup.exe和 setup.msi安裝檔案,拷貝到用戶端,點選setup.exe就像安裝其他windows程式一樣安裝我們的服務

Windows Services的安裝部署 三種方法總結