Visual Studio 2012的Windows Service服務安裝方式

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   os   ar   使用   sp   

windows服務應用程式是一種長期運行在作業系統背景程式,它對於伺服器環境特別適合,它沒有使用者介面,不會產生任何可視輸出,任何使用者輸出都回被寫進windows事件記錄。電腦啟動時,服務會自動開始運行,他們不要使用者一定登陸才運行。

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

建立window 服務

建立一個window 服務項目MyService,如

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

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

雙擊Timer事件,添加事件

後台代碼   public partial class Service1 : ServiceBase    {        public Service1()        {            InitializeComponent();        }        protected override void OnStart(string[] args)        {            // TODO: 在此處添加代碼以啟動服務。         }        protected override void OnStop()        {            // TODO: 在此處添加代碼以執行停止服務所需的關閉操作。         }        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)        {        }    }

public partial class Service1 : ServiceBase    {        public Service1()        {            InitializeComponent();        }        protected override void OnStart(string[] args)        {            // TODO: 在此處添加代碼以啟動服務。            string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "啟動";            WriteLog(state);        }        protected override void OnStop()        {            // TODO: 在此處添加代碼以執行停止服務所需的關閉操作。            string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";            WriteLog(state);        }        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)        {            WriteLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));        }        public void WriteLog(string str)        {            using (StreamWriter sw = File.AppendText(@"c:\service.txt"))            {                sw.WriteLine(str);                sw.Flush();            }         }    }

其中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 派生。任何有用的服務均將重寫 OnStart 和 OnStop 方法。對於其他功能,可以用特定行為重寫 OnPause 和 OnContinue 來響應服務狀態的更改。

服務是長時間啟動並執行可執行檔,它不支援使用者介面,在登入的使用者帳戶下可能無法運行。服務可以在沒有任何使用者登入電腦的情況下運行。

預設情況下,服務在“系統”帳戶下運行,該帳戶與“管理員”帳戶不同。不能更改“系統”帳戶的許可權。或者,可以使用 ServiceProcessInstaller 指定運行服務時將使用的使用者帳戶。

一個可執行檔可以包含多項服務,但對每項服務均必須包含一個單獨的 ServiceInstaller。ServiceInstaller 執行個體在系統中註冊服務。安裝程式還將每項服務與一個事件記錄關聯,您可以使用該日誌記錄服務命令。可執行檔中的 main() 函數定義哪些服務應該運行。服務的當前工作目錄是系統目錄,而不是可執行檔所位於的目錄。

當啟動某項服務時,系統將定位相應的可執行檔,並運行該服務的 OnStart 方法(它包含在可執行檔內)。但是,運行服務與運行可執行檔並不相同。可執行檔僅載入服務。服務則通過“服務控制管理員”訪問(例如啟動和停止)。

當您對服務首次調用“開始”時,可執行檔調用 ServiceBase 衍生類別的建構函式。在建構函式執行之後將立即調用 OnStart 命令處理方法。在服務首次載入之後,建構函式不會再次執行,因此有必要將建構函式執行的處理和 OnStart 執行的處理分開。可以由 OnStop 釋放的任何資源都應在 OnStart 中建立。如果服務在 OnStop 釋放資源後再次啟動,那麼,在建構函式中建立資源會妨礙這些資源的正確建立。

“服務控制管理員”(SCM) 提供與服務互動的方式。可以使用 SCM 將“開始”(Start)、“停止”(Stop)、“暫停”(Pause)、“繼續”(Continue) 或自訂命令傳遞到服務中。SCM 使用 CanStop 和 CanPauseAndContinue 的值,決定服務是否接受“停止”、“暫停”或“繼續”命令。僅當服務類中相應的屬性 CanStopCanPauseAndContinuetrue 時,才會在 SCM 的操作功能表中啟用“停止”、“暫停”或“繼續”。如果已啟用,則相應的命令將傳遞到服務,並且調用 OnStopOnPauseOnContinue。如果 CanStop、CanShutdown 或 CanPauseAndContinuefalse,則即使已實現相應的命令處理方法(如 OnStop),也不會予以處理。

可以使用 ServiceController 類通過編程實現 SCM 使用使用者介面實現的功能。可以自動處理控制台中可用的任務。如果 CanStopCanShutdownCanPauseAndContinuetrue,但尚未實現相應的命令處理方法(如 OnStop),則系統引發異常並忽略該命令。

不必在 ServiceBase 中實現 OnStartOnStop 或其他任何方法。然而,服務的行為在 OnStart 中加以描述,因此至少應重寫該成員。必須在可執行檔的 main() 函數中設定服務的服務名稱。在 main() 中設定的服務名稱必須與服務安裝程式的 ServiceName 屬性完全符合。

可以使用 InstallUtil.exe 在系統中安裝服務。

可以參考文獻:http://msdn.microsoft.com/zh-cn/library/system.serviceprocess.servicebase(VS.80).aspx

Visual Studio 2012的Windows Service服務安裝方式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.