Microsoft Windows 服務(即,以前的 NT 服務)使您能夠創建在它們自己的 Windows 會話中可長時間運行的可執行應用程序。這些服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何用戶界面。這使服務非常適合在服務器上使用,或任何時候,為了不影響在同一台計算機上工作的其他用戶,需要長時間運行功能時使用。還可以在不同於登錄用戶的特定用戶帳戶或默認計算機帳戶的安全上下文中運行服務。
使用Microsoft Visual Studio2012可以很方便的創建一個Windows服務,本例實現一個向D盤的txt文件里,寫入系統時間的Windows服務。
新建一個Windows Services工程:
工程創建好之后,默認會有一個Services1.cs文件,刪掉此文件,重新添加一個新Item
右擊新添加的這個文件,選擇View code,可以看到,有兩個函數 OnStart和OnStop,OnStart函數在啟動服務時執行,OnStop函數在停止服務時執行。
這兩個函數的代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Diagnostics; 6 using System.Linq; 7 using System.ServiceProcess; 8 using System.Text; 9 using System.Threading.Tasks; 10 using System.IO; 11 12 namespace MyFirstWindowsService 13 { 14 partial class MyWindowsService : ServiceBase 15 { 16 public MyWindowsService() 17 { 18 InitializeComponent(); 19 } 20 21 protected override void OnStart(string[] args) 22 { 23 // TODO: Add code here to start your service. 24 FileStream fileStream = new FileStream(@"D:\MyWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write); 25 26 StreamWriter streamWriter = new StreamWriter(fileStream); 27 28 streamWriter.BaseStream.Seek(0, SeekOrigin.End); 29 30 streamWriter.WriteLine("My service started" + DateTime.Now.ToString() + "\n"); 31 32 streamWriter.Flush(); 33 34 streamWriter.Close(); 35 36 fileStream.Close(); 37 } 38 39 protected override void OnStop() 40 { 41 // TODO: Add code here to perform any tear-down necessary to stop your service. 42 FileStream fileStream = new FileStream(@"D:\MyWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write); 43 44 StreamWriter streamWriter = new StreamWriter(fileStream); 45 46 streamWriter.BaseStream.Seek(0, SeekOrigin.End); 47 48 streamWriter.WriteLine("My service stopped " + DateTime.Now.ToString() + "\n"); 49 50 streamWriter.Flush(); 51 52 streamWriter.Close(); 53 54 fileStream.Close(); 55 } 56 } 57 }
之后需要新建一個安裝組件MyWindowsServiceProjectInstaller(右擊MyWindowsService.cs這個文件選擇view desiner,然后選擇Add Installer),需要將MyFirstWindowsServiceProcessInstaller的account屬性設置為localservice.
編寫批處理文件:
安裝服務批處理:
1 %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe C:\Users\gaoja1\Desktop\MyWindowsService\MyFirstWindowsService\bin\Debug\MyFirstWindowsService.exe 2 Net Start ServiceTest 3 sc config ServiceTest start= auto
卸載服務批處理:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u C:\Users\gaoja1\Desktop\MyWindowsService\MyFirstWindowsService\bin\Debug\MyFirstWindowsService.exe
服務安裝好之后:
服務啟動之后可以在D盤看到一個txt的文件,里面記錄了服務的啟動時間.