window 服務(一)

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()

等待服務到達指定的狀態

相關文章
相關標籤/搜索