windows服務應用程序是一種長期運行在操做系統後臺的程序,它對於服務器環境特別適合,它沒有用戶界面,不會產生任何可視輸出,任何用戶輸出都回被寫進windows事件日誌。計算機啓動時,服務會自動開始運行,他們不要用戶必定登錄才運行。windows
能夠經過選擇菜單「開始」-〉「控制面板」-〉「管理工具」-〉「服務」來查看現有系統中的服務,以下圖:服務器
建立window 服務ide
新建一個window 服務項目MyService,以下圖工具
從工具箱的組件表中拖動一個Timer對象到這個視圖設計器上面。post
設置Timer屬性,Enable爲true,Interval屬性爲3000毫秒spa
雙擊Timer事件,添加事件操作系統
1 public partial class Service1 : ServiceBase 2 { 3 public Service1() 4 { 5 InitializeComponent(); 6 } 7 8 protected override void OnStart(string[] args) 9 { 10 // TODO: 在此處添加代碼以啓動服務。 11 } 12 13 protected override void OnStop() 14 { 15 // TODO: 在此處添加代碼以執行中止服務所需的關閉操做。 16 } 17 18 private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 19 { 20 21 } 22 }
1 public partial class Service1 : ServiceBase 2 { 3 public Service1() 4 { 5 InitializeComponent(); 6 } 7 protected override void OnStart(string[] args) 8 { 9 // TODO: 在此處添加代碼以啓動服務。 10 string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "啓動"; 11 WriteLog(state); 12 } 13 protected override void OnStop() 14 { 15 // TODO: 在此處添加代碼以執行中止服務所需的關閉操做。 16 string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "中止"; 17 WriteLog(state); 18 } 19 private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 20 { 21 WriteLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); 22 } 23 public void WriteLog(string str) 24 { 25 using (StreamWriter sw = File.AppendText(@"c:\service.txt")) 26 { 27 sw.WriteLine(str); 28 sw.Flush(); 29 } 30 } 31 }
其中OnStart和OnStop分別是服務器啓動和中止後,所發生的事件操做方法,WriteLog是操做方法;.net
將服務程序service1.cs 切換到視圖模式,用鼠標右鍵單擊設計視圖選擇「添加安裝程序」選項,此後在項目中自動增長了一個ProjectInstaller.cs,以下圖命令行
設置serviceInstaller1組件屬性,debug
ServiceName=MyServiceLog安裝服務器名字;
StartType=Automatic 開機自動啓動
設計serviceProcessInstaller1的屬性Account=LocalSystem;
運行編譯,一個簡單的windows服務已經開發完成
注:若是在代碼中的文件路徑寫成以下「service.txt」,那麼此時文件保存在C:\WINDOWS\system32文件夾中。
安裝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
若是修改這個服務,可是路徑沒有變化的話是不須要從新註冊服務的,直接中止服務,而後用新的文件覆蓋原來的文件便可,若是路徑發生變化,應該先卸載這個服務,而後從新安裝這個服務。
Window服務應用程序體系結構
.net framework對windows服務提供了更多的支持,在命名空間System.ServiceProcess下.
包括類以下:
ServiceBase 全部Window服務的基類
ServiceController 該類的一個實例表明一個具體的windows服務
ServiceControllerPermission 用於控制ServiceController的使用權限
ServiceInstaller 用於執行對windows服務的安裝
ServiceProcessInstaller 用於執行對windows服務的安裝,與上類的不一樣的是,該類能夠表明一個能夠執行的windows服務的進程.
ServiceBase類
ServiceBase方法:
方法 |
描述 |
Run() |
運行一個windows服務 |
OnContinue() |
繼續執行服務 |
OnCustomCommand() |
向windows服務發出自定指令 |
OnPause() |
暫停正在運行的windows服務 |
OnPowerEvent() |
當計算機的電源狀態改變是調用 |
OnShutDown() |
當系統關閉條用OnStart()開始一個windows服務 |
OnStop() |
結束一個windows服務 |
ServiceBase屬性:
屬性 |
描述 |
AutoLog |
表示是否將開始,結束,暫停,繼續等指令寫入事件日誌 |
CanHandlePowerEvent |
表示該服務是否支持電源事件 |
CanPauseAndContinue |
表示該服務是否支持暫停和繼續功能 |
CanShutDown |
表示該服務是否支持關閉功能 |
CanStop |
表示該服務是否支持結構功能 |
EventLog |
應用程序的時間日誌 |
ServiceName |
該服務名稱 |
ServiceController類:服務控制類,用於控制windows服務的各類具體行爲,它既能夠控制本地的windows服務,有能夠控制遠程的windows服務。
ServiceControler的方法:
方法 |
描述 |
GetDivices() |
獲得一臺計算機上設備驅動器服務 |
GetServices() |
獲得一臺計算上的非設備驅動器服務 |
Close() |
用於斷開服務鏈接,而且釋放服務控制器所佔用的資源 |
Continue() |
繼續被暫停的服務 |
ExcuteCommand() |
對服務執行一條自定義命令 |
Pause() |
暫停服務 |
Refresh() |
對全部屬性更新 |
Start() |
啓動服務 |
Stop() |
中止服務 |
WaitForStatus() |
等待服務到達指定的狀態 |