C#創建windows服務並發布
創建window 服務
新建一個window 服務項目MyService,如下圖
切換到代碼視圖修改.
[csharp] view plaincopy- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.ServiceProcess;
- using System.Text;
- using System.Threading.Tasks;
- namespace MyService
- {
- public partial class Service1 : ServiceBase
- {
- //定時器
- System.Timers.Timer t = null;
- public Service1()
- {
- InitializeComponent();
- //啟用暫停恢復
- base.CanPauseAndContinue = true;
- //每5秒執行一次
- t = new System.Timers.Timer(5000);
- //設置是執行一次(false)還是一直執行(true);
- t.AutoReset = true;
- //是否執行System.Timers.Timer.Elapsed事件;
- t.Enabled = true;
- //到達時間的時候執行事件(theout方法);
- t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
- }
- //啟動服務執行
- protected override void OnStart(string[] args)
- {
- string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "啟動";
- WriteLog(state);
- }
- //停止服務執行
- protected override void OnStop()
- {
- string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
- WriteLog(state);
- }
- //恢復服務執行
- protected override void OnContinue()
- {
- string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "繼續";
- WriteLog(state);
- t.Start();
- }
- //暫停服務執行
- protected override void OnPause()
- {
- string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "暫停";
- WriteLog(state);
- t.Stop();
- }
- public void WriteLog(string str)
- {
- using (StreamWriter sw = File.AppendText(@"d:\service.txt"))
- {
- sw.WriteLine(str);
- sw.Flush();
- }
- }
- public void theout(object source, System.Timers.ElapsedEventArgs e)
- {
- WriteLog("theout:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
- }
- }
- }
解釋:OnStart和OnStop分別是服務器啟動和停止後,所發生的事件操作方法.定義了一個定時器,每隔5秒執行一次(theout方法),因為暫停恢復功能默認是不啟用的,需要設置CanPauseAndContinue屬性啟用此功能,同時重寫OnStop和OnContinue方法,添加自己的邏輯代碼.
將服務程序service1.cs 切換到視圖模式,用鼠標右鍵單擊設計視圖選擇“添加安裝程序”選項,此後在項目中自動增加了一個ProjectInstaller.cs,
如下圖
打開ProjectInstaller,修改serviceInstaller1組件屬性
Description= 我的服務備註 服務備註說明
DisplayName=我的服務 服務友好名字
ServiceName=MyService 安裝服務器名字
StartType=Automatic 服務類型
ü Manual 服務安裝後,必須手動啟動。
ü Automatic 每次計算機重新啟動時,服務都會自動啟動。
ü Disabled 服務無法啟動。
並設計serviceProcessInstaller1的屬性Account=LocalSystem
運行編譯,一個簡單的windows服務已經開發完成.
安裝window服務
安裝命令:InstallUtil.exe MyServiceLog.exe
InstallUtil存在路徑為:C:\WINDOWS\Microsoft.NET\Framework\.NET版本號
復制C:\WINDOWS\Microsoft.NET\Framework\版本號 路徑中的InstallUtil.exe 到bin/debug或bin/release文件夾中,在命令行窗口中直接運行命令
InstallUtil.exe MyServiceLog.exe,在系統中註冊這個服務,使它建立一個合適的註冊項,如下圖:
然後再window服務列表中,啟動MyServiceLog服務
卸載window 服務
命令:InstallUtil.exe MyServiceLog.exe /u
如果修改這個服務,但是路徑沒有變化的話是不需要重新註冊服務的,直接停止服務,然後用新的文件覆蓋原來的文件即可,如果路徑發生變化,應該先卸載這個服務,然後重新安裝這個服務。
C#創建windows服務並發布