Microsoft Windows 服務(即,以前的 NT 服務)使您能夠創建在它們自己的 Windows 會話中可長時間運行的可執行應用程序。
服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何用戶界面。
服務非常適合在服務器上使用,或任何時候,為了不影響在同一台計算機上工作的其他用戶,需要長時間運行功能時使用。
還可以在不同於登錄用戶的特定用戶帳戶或默認計算機帳戶的安全上下文中運行服務
1、VS新建一個Windows服務項目,命名MyWindowsService
2、修改Service1為MyService,F7進入代碼頁面(點擊切換代碼視圖),編寫操作邏輯代碼
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會出現
1、選中MyService.cs,右鍵-->查看設計器 ;在設計器中右鍵-->添加安裝程序
2、項目中添加了ProjectInstaller.cs文件,該文件中視圖自動會添加倆個組件serviceProcessInstaller1和serviceInstaller1
3、選中serviceProcessInstaller1組件,查看屬性,設置account為LocalSystem,這樣能保證無論是什麼用戶登錄都能執行。
4、選中serviceInstaller1組件,查看屬性設置如下
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、我的電腦-->右鍵管理-->服務和應用程序-->服務 找到我們的服務
啟動服務後會一直執行Handle()方法寫日志
首先確保服務已經安裝成功,並且處於已啟動
VS-->調試-->附加到進程 找到我們服務名稱MyWindowsService確定
然後斷點就進代碼了
如果出現MyWindowsService.exe無法復制或者進程占用的問題
打開進程管理器,關閉MyWindowsService.exe進程就可以了。