window 服务(一)
windows服務(wù)應(yīng)用程序是一種長(zhǎng)期運(yùn)行在操作系統(tǒng)后臺(tái)的程序,它對(duì)于服務(wù)器環(huán)境特別適合,它沒(méi)有用戶界面,不會(huì)產(chǎn)生任何可視輸出,任何用戶輸出都回被寫進(jìn)windows事件日志。計(jì)算機(jī)啟動(dòng)時(shí),服務(wù)會(huì)自動(dòng)開始運(yùn)行,他們不要用戶一定登陸才運(yùn)行。
可以通過(guò)選擇菜單“開始”-〉“控制面板”-〉“管理工具”-〉“服務(wù)”來(lái)查看現(xiàn)有系統(tǒng)中的服務(wù),如下圖:
創(chuàng)建window 服務(wù)
新建一個(gè)window 服務(wù)項(xiàng)目MyService,如下圖
從工具箱的組件表中拖動(dòng)一個(gè)Timer對(duì)象到這個(gè)視圖設(shè)計(jì)器上面。
設(shè)置Timer屬性,Enable為true,Interval屬性為3000毫秒
雙擊Timer事件,添加事件
???????
后臺(tái)代碼 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: 在此處添加代碼以啟動(dòng)服務(wù)。 11 } 12 13 protected override void OnStop() 14 { 15 // TODO: 在此處添加代碼以執(zhí)行停止服務(wù)所需的關(guān)閉操作。 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: 在此處添加代碼以啟動(dòng)服務(wù)。 10 string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "啟動(dòng)"; 11 WriteLog(state); 12 } 13 protected override void OnStop() 14 { 15 // TODO: 在此處添加代碼以執(zhí)行停止服務(wù)所需的關(guān)閉操作。 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分別是服務(wù)器啟動(dòng)和停止后,所發(fā)生的事件操作方法,WriteLog是操作方法;
將服務(wù)程序service1.cs 切換到視圖模式,用鼠標(biāo)右鍵單擊設(shè)計(jì)視圖選擇“添加安裝程序”選項(xiàng),此后在項(xiàng)目中自動(dòng)增加了一個(gè)ProjectInstaller.cs,如下圖
設(shè)置serviceInstaller1組件屬性,
ServiceName=MyServiceLog安裝服務(wù)器名字;
StartType=Automatic? 開機(jī)自動(dòng)啟動(dòng)
設(shè)計(jì)serviceProcessInstaller1的屬性Account=LocalSystem;
運(yùn)行編譯,一個(gè)簡(jiǎn)單的windows服務(wù)已經(jīng)開發(fā)完成
注:如果在代碼中的文件路徑寫成如下“service.txt”,那么此時(shí)文件保存在C:\WINDOWS\system32文件夾中。
?
安裝window服務(wù)
安裝命令:InstallUtil.exe MyServiceLog.exe
InstallUtil存在路徑為:C:\WINDOWS\Microsoft.NET\Framework\.NET版本號(hào)
復(fù)制C:\WINDOWS\Microsoft.NET\Framework\版本號(hào)? 路徑中的InstallUtil.exe 到bin/debug或bin/release文件夾中,在命令行窗口中直接運(yùn)行命令
InstallUtil.exe MyServiceLog.exe,在系統(tǒng)中注冊(cè)這個(gè)服務(wù),使它建立一個(gè)合適的注冊(cè)項(xiàng),如下圖:
?
然后再window服務(wù)列表中,啟動(dòng)MyServiceLog服務(wù)
卸載window 服務(wù)
命令:InstallUtil.exe MyServiceLog.exe /u
如果修改這個(gè)服務(wù),但是路徑?jīng)]有變化的話是不需要重新注冊(cè)服務(wù)的,直接停止服務(wù),然后用新的文件覆蓋原來(lái)的文件即可,如果路徑發(fā)生變化,應(yīng)該先卸載這個(gè)服務(wù),然后重新安裝這個(gè)服務(wù)。
?Window服務(wù)應(yīng)用程序體系結(jié)構(gòu)
.net framework對(duì)windows服務(wù)提供了更多的支持,在命名空間System.ServiceProcess下.
包括類如下:
ServiceBase 所有Window服務(wù)的基類
ServiceController 該類的一個(gè)實(shí)例代表一個(gè)具體的windows服務(wù)
ServiceControllerPermission 用于控制ServiceController的使用權(quán)限
ServiceInstaller 用于執(zhí)行對(duì)windows服務(wù)的安裝
ServiceProcessInstaller 用于執(zhí)行對(duì)windows服務(wù)的安裝,與上類的不同的是,該類可以代表一個(gè)可以執(zhí)行的windows服務(wù)的進(jìn)程.
ServiceBase類
ServiceBase方法:
| 方法 | 描述 |
| Run() | 運(yùn)行一個(gè)windows服務(wù) |
| OnContinue() | 繼續(xù)執(zhí)行服務(wù) |
| OnCustomCommand() | 向windows服務(wù)發(fā)出自定指令 |
| OnPause() | 暫停正在運(yùn)行的windows服務(wù) |
| OnPowerEvent() | 當(dāng)計(jì)算機(jī)的電源狀態(tài)改變是調(diào)用 |
| OnShutDown() | 當(dāng)系統(tǒng)關(guān)閉條用OnStart()開始一個(gè)windows服務(wù) |
| OnStop() | 結(jié)束一個(gè)windows服務(wù) |
?
?ServiceBase屬性:
| 屬性 | 描述 |
| AutoLog | 表示是否將開始,結(jié)束,暫停,繼續(xù)等指令寫入事件日志 |
| CanHandlePowerEvent | 表示該服務(wù)是否支持電源事件 |
| CanPauseAndContinue | 表示該服務(wù)是否支持暫停和繼續(xù)功能 |
| CanShutDown | 表示該服務(wù)是否支持關(guān)閉功能 |
| CanStop | 表示該服務(wù)是否支持結(jié)構(gòu)功能 |
| EventLog | 應(yīng)用程序的時(shí)間日志 |
| ServiceName | 該服務(wù)名稱 |
?
?
?
?
?
?
?
?
?
?
?
?
ServiceController類
服務(wù)控制類,用于控制windows服務(wù)的各種具體行為,它既可以控制本地的windows服務(wù),有可以控制遠(yuǎn)程的windows服務(wù)。
ServiceControler的方法:
| 方法 | 描述 |
| GetDivices() | 得到一臺(tái)計(jì)算機(jī)上設(shè)備驅(qū)動(dòng)器服務(wù) |
| GetServices() | 得到一臺(tái)計(jì)算上的非設(shè)備驅(qū)動(dòng)器服務(wù) |
| Close() | 用于斷開服務(wù)連接,并且釋放服務(wù)控制器所占用的資源 |
| Continue() | 繼續(xù)被暫停的服務(wù) |
| ExcuteCommand() | 對(duì)服務(wù)執(zhí)行一條自定義命令 |
| Pause() | 暫停服務(wù) |
| Refresh() | 對(duì)所有屬性更新 |
| Start() | 啟動(dòng)服務(wù) |
| Stop() | 停止服務(wù) |
| WaitForStatus() | 等待服務(wù)到達(dá)指定的狀態(tài) |
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的window 服务(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 新浪微博Python客户端接口OAuth
- 下一篇: Android操作系统2.0制作备份