window 服務(一)


windows服務應用程序是一種長期運行在操作系統后台的程序,它對於服務器環境特別適合,它沒有用戶界面,不會產生任何可視輸出,任何用戶輸出都回被寫進windows事件日志。計算機啟動時,服務會自動開始運行,他們不要用戶一定登陸才運行。

可以通過選擇菜單“開始”-〉“控制面板”-〉“管理工具”-〉“服務”來查看現有系統中的服務,如下圖:

創建window 服務

新建一個window 服務項目MyService,如下圖

從工具箱的組件表中拖動一個Timer對象到這個視圖設計器上面。

設置Timer屬性,Enable為true,Interval屬性為3000毫秒

雙擊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是操作方法;

將服務程序service1.cs 切換到視圖模式,用鼠標右鍵單擊設計視圖選擇“添加安裝程序”選項,此后在項目中自動增加了一個ProjectInstaller.cs,如下圖

設置serviceInstaller1組件屬性,

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

等待服務到達指定的狀態

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM