天天看點

C#開發Windows服務

Microsoft Windows 服務(即,以前的 NT 服務)使您能夠建立在它們自己的 Windows 會話中可長時間運作的可執行應用程式。

服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何使用者界面。

服務非常适合在伺服器上使用,或任何時候,為了不影響在同一台計算機上工作的其他使用者,需要長時間運作功能時使用。

還可以在不同于登入使用者的特定使用者帳戶或預設計算機帳戶的安全上下文中運作服務

一、建立服務

1、VS建立一個Windows服務項目,命名MyWindowsService

C#開發Windows服務
C#開發Windows服務

2、修改Service1為MyService,F7進入代碼頁面(點選切換代碼視圖),編寫操作邏輯代碼

C#開發Windows服務

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

using System;
using System.IO;
using System.ServiceProcess;
using System.Threading.Tasks;

namespace MyWindowsService
{
    public partial class MyService : ServiceBase
    {
        public MyService()
        {
            InitializeComponent();
        }
        //服務開啟
        protected override void OnStart(string[] args)
        {
            Task.Factory.StartNew(Handle);
        }
        //服務關閉
        protected override void OnStop()
        {
           
        }

        //需要定時執行的代碼段
        private void Handle()
        {
            while (true)
            {
                try
                {
                    var path = AppDomain.CurrentDomain.BaseDirectory + "service.log";
                    var context = "MyWindowsService: Service Stoped " + DateTime.Now + "\n";
                    WriteLogs(path, context);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }


        public void WriteLogs(string path, string context)
        {
            var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
            var sw = new StreamWriter(fs);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine(context);

            sw.Flush();
            sw.Close();
            fs.Close();
        }
    }
}      

服務不能直接運作,F5會出現

C#開發Windows服務

二、建立服務安裝程式

1、選中MyService.cs,右鍵-->檢視設計器 ;在設計器中右鍵-->添加安裝程式

C#開發Windows服務

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

C#開發Windows服務

3、選中serviceProcessInstaller1元件,檢視屬性,設定account為LocalSystem,這樣能保證無論是什麼使用者登入都能執行。

C#開發Windows服務

4、選中serviceInstaller1元件,檢視屬性設定如下

C#開發Windows服務

ServiceName:表示在系統服務中的名稱

StartType:Manual:手動啟動,預設停止,Automatic:自動啟動

Description:服務描述

三、安裝、解除安裝服務

安裝服務需要InstallUtil.exe,一般在電腦這個目錄找到C:\Windows\Microsoft.NET\Framework64\v4.0.30319 

此處需要注意的是,在C:\Windows\Microsoft.NET\Framework目錄下有很多類似版本,具體去哪個目錄要看項目的運作環境,例 如果是.net framework2.0則需要輸入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

1、重新生成MyWindowsService項目

2、生成的bin目錄考到要安裝的目錄(服務檔案已經在附件中):例如:拷貝到C:\(服務路徑根據實際情況安裝,解除安裝)

3、視窗+R 打開cmd

      cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319

安裝服務: Installutil C:\bin\Debug\MyWindowsService.exe

解除安裝服務: Installutil /u C:\bin\Debug\MyWindowsService.exe

4、我的電腦-->右鍵管理-->服務和應用程式-->服務  找到我們的服務

C#開發Windows服務

啟動服務後會一直執行Handle()方法寫日志

C#開發Windows服務

四、調試服務

首先確定服務已經安裝成功,并且處于已啟動

VS-->調試-->附加到程序 找到我們服務名稱MyWindowsService确定

C#開發Windows服務

然後斷點就進代碼了

C#開發Windows服務

如果出現MyWindowsService.exe無法複制或者程序占用的問題

打開程序管理器,關閉MyWindowsService.exe程序就可以了。