net Windows服務程式和安裝程式製作

來源:互聯網
上載者:User

研究window服務,這文章不錯!講得也不錯...

最近項目中用到window服務程式,以前沒接觸過,比較陌生,花了兩天的時間學習了下,寫了個簡單的服務,但在製作安裝程式的時候,參照網上很多資料,卻都製作不成功,可能是開發環境或項目配置的不同,這裡把自己成功製作的方式貼出來,一方面留給自己,一方面也希望能給遇到同樣問題絕望中不能自拔、以致失去靈魂的路人甲,路人乙一還魂丹 . . .

       IDE :WIN2003 VS2008 SQL2005

      一、建立window服務項目

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

 

      二、編寫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)  
         {
             StartHello();
         }

        /// <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 StartHello()
         {
            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,表示本地系統帳號

 

      Window服務的安裝有兩個方式:

      一、命令安裝

       通過命令視窗,執行 InstallUtil.exe 服務路徑 可安裝Window服務,你是不是覺得我在扯,這麼長的命令怎麼看?怎麼記住?可以想想如果用戶端是一個不懂程式的人是不可能自己完成安裝的,那麼能不能製作一個簡單有效,點點按鈕可以安裝的呢,答案是肯定的 ——> 安裝程式製作       二、安裝程式        安裝程式製作 :解決方案(右擊)——> 增加 ——> 建立項目 ——> 項目類型選擇安裝和部署 ——> 模板選擇安裝項目   :     建立後,安裝項目(右擊) ——> 視圖 ——> 檔案系統

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

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

       上面可以看到有安裝,提交,復原,卸載等操作,我們先增加安裝操作,安裝(右擊)——> 增加自訂動作,會彈出一個對話

       選擇應用程式檔案夾,並選中之前增加的主輸出項,確定,這樣這個安裝程式就增加了安裝的操作,同樣按照這樣的方式增加卸載操作,卸載與安裝唯一不同的是需要設定一個命令參數,不可少,

      這裡 Arguments 裡輸入 /u 表示卸載命令相當於 InstallUtil.exe /u 服務路徑 , 到這裡 ,我們的安裝程式就已經製作好了,產生安裝程式項目,將會產生 setup.exe 和 setup.msi 安裝檔案,拷貝到用戶端,點擊setup.exe 就像安裝QQ一樣安裝我們的服務,實際上比QQ好多了,QQ還有廣告,我們可是純綠色的!

 

相關文章

聯繫我們

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