建立第一個windows服務

來源:互聯網
上載者:User

標籤:覆蓋   空間   lease   介面   src   frame   ini   磁碟機   oca   

windows服務應用程式是一種長期運行在作業系統背景程式,它對於伺服器環境特別適合,它沒有使用者介面,不會產生任何可視輸出,任何使用者輸出都回被寫進windows事件記錄。

電腦啟動時,服務會自動開始運行,他們不要使用者一定登陸才運行。

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

建立一個windows服務

切換到程式碼檢視修改.

using System;using System.IO;using System.ServiceProcess;namespace WindowsServiceTest{    public partial class hjpServiceTest : ServiceBase    {        //定時器          System.Timers.Timer t = null;        public hjpServiceTest()          {              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方法,添加自己的邏輯代碼.

 

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

 

開啟ProjectInstaller,修改serviceInstaller1組件屬性

 

Description= 我的服務備忘                       服務備忘說明

DisplayName=我的服務                            服務易記名稱字 

ServiceName=hjpServiceTest                         安裝伺服器名字

StartType=Automatic                                服務類型

ü         Manual      服務安裝後,必須手動啟動。

ü         Automatic    每次電腦重新啟動時,服務都會自動啟動。

ü         Disabled     服務無法啟動。

 

並設計serviceProcessInstaller1的屬性Account=LocalSystem

 

運行編譯,一個簡單的windows服務已經開發完成.

 

安裝window服務

安裝命令:InstallUtil.exe WindowsServiceTest.exe

InstallUtil存在路徑為:C:\WINDOWS\Microsoft.NET\Framework\.NET版本號碼

複製C:\WINDOWS\Microsoft.Net\Framework\版本號碼  路徑中的InstallUtil.exe 到bin/debug或bin/release檔案夾中,在命令列視窗中直接運行命令

InstallUtil.exe WindowsServiceTest.exe,在系統中註冊這個服務,使它建立一個合適的註冊項,如:

然後再window服務列表中,啟動hjpServiceTest服務

卸載window 服務

命令:InstallUtil.exe WindowsServiceTest.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()

等待服務到達指定的狀態

 

 

ServiceController屬性

屬性 描述
CanPauseAndContinue 表示服務是否可以停止
CanShutDown 表示服務在系統關閉時是否可以得到通知,CanStop表示伺服器是否可以被停止
DependentServices 表示與服務相關聯的裝置
DisplayName 表示服務控制器所綁定的名稱
MachineName 表示服務所在的電腦名稱
ServiceName 表示綁定的服務名稱
ServiceType 表示控制器所引用的服務類型
ServicesDependedOn 表示服務所依賴ude服務集合Status表示控制器所引用的服務狀態

 

 

 

 

 

 

 

 

ServiceInstaller類

ServiceInstaller的屬性

屬性 描述
DisplayName 顯示名稱
ServiceName 表示服務名稱,這個名稱必須與Installer將要安裝的windows服務名稱相同
ServiceDependOn 服務所要用到的其服務名稱的一個數組
StartType 表示所安裝服務的啟動特性,可以為Automatic,Manual或Disable,預設為Manual

 

 

 

 

  ServiceInstaller事件
方法 事件
AfterInstaller() 調用Install方法後發生
AfterRollback() 調用Rollback後發生
AfterUninstall() 調用Uninstall方法後發生
BeforeInstall() 調用Install方法前發生
BeforeRollback() 調用Rollback方法前發生
BeforeUninstall() 調用Uninstall方法前發生
Committed() 調用Commit方法後發生
Committing() 調用Commit方法前發生
       
 

 

 

ServiceProcessInstaller類

用於安裝ServiceBase繼承的windows服務,它與一個可執行程式中的所有服務所做基本工作相同

ServiceProcessInstaller屬性

屬性 描述
Account 運行服務的目前使用者帳號
HelpText 在服務安裝選項中給出的協助資訊
Password 運行服務的當前帳號密碼
UserName 運行服務的當前帳號使用者名稱

 

 

 

 

 

------------------------------------------------------------------------------------------------------------------------

Windows服務調試

 

vs開啟MySerivceLog項目

在管理工具-〉服務裡面啟動MyServiceLog服務

單擊vs的調試 -〉附加到進程,如

 

 

在"可用進程“列表中,選中你要調式的服務的可執行檔名

單擊 ”附加“按鈕,即可進入調試狀態

在timer1_Elapsed方法裡設定一個斷點,然後等它執行,服務執行到該處時候會自動啟動斷點。

 

 

建立第一個windows服務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.