前段時間作一個數據遷移項目,剛開始用B/S架構作的項目,但B/S要寄存在IIs中,而IIs又不穩定因素,若是重啓IIs就要打開頁面才能運行項目。有不便之處,就改用Windows服務實現。這篇就總結下,windows服務的編寫,調試,安裝卸載。windows
Microsoft Windows 服務可以建立在它們本身的 Windows 會話中可長時間運行的可執行應用程序。這些服務能夠在計算機啓動時自動啓動,能夠暫停和從新啓動並且不顯示任何用戶界面。這使服務很是適合在服務器上使用,或任什麼時候候,爲了避免影響在同一臺計算機上工做的其餘用戶,須要長時間運行功能時使用。還能夠在不一樣於登陸用戶的特定用戶賬戶或默認計算機賬戶的安全上下文中運行服務。本文就向你們介紹如何運用Visual C#來一步一步建立一個文件監視的Windows服務程序,而後介紹如何安裝、測試和調試該Windows服務程序。數組
建立好項目以後 --- >> 雙擊 Service1.cs ---- >> 出現一個設計界面 ---->> 右鍵界面 --- >> 彈出對話框選擇添加安裝程序安全
上面一系列操做完成後,就能夠對windows服務名稱描述以及啓動方式等進行修改。服務器
[RunInstaller(true)] public class Installer1 : System.Configuration.Install.Installer { /// <summary> /// 必需的設計器變量。 /// </summary> private System.ComponentModel.Container components = null; private System.ServiceProcess.ServiceProcessInstaller spInstaller; private System.ServiceProcess.ServiceInstaller sInstaller; public Installer1() { // 該調用是設計器所必需的。 InitializeComponent(); // TODO: 在 InitComponent 調用後添加任何初始化 } #region Component Designer generated code /// <summary> /// 設計器支持所需的方法 - 不要使用代碼編輯器修改 /// 此方法的內容。 /// </summary> private void InitializeComponent() { components = new System.ComponentModel.Container(); // 建立ServiceProcessInstaller對象和ServiceInstaller對象 this.spInstaller = new System.ServiceProcess.ServiceProcessInstaller(); this.sInstaller = new System.ServiceProcess.ServiceInstaller(); // 設定ServiceProcessInstaller對象的賬號、用戶名和密碼等信息 this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem; this.spInstaller.Username = null; this.spInstaller.Password = null; // 設定服務名稱 this.sInstaller.ServiceName = "PmsDataUpdateService"; //服務描述 this.sInstaller.Description = "hi longhao !"; // 設定服務的啓動方式 this.sInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic; this.Installers.AddRange( new System.Configuration.Install.Installer[] { this.spInstaller, this.sInstaller }); } #endregion }
修改好後回頭,寫入本身想要的操做。Service1.cs出現設計界面,雙擊設計界面進入cs代碼頁。能夠重寫這些方法。架構
protected override void OnStart(string[] args) { //服務開啓執行代碼 } protected override void OnStop() { //服務結束執行代碼 } protected override void OnPause() { //服務暫停執行代碼 base.OnPause(); } protected override void OnContinue() { //服務恢復執行代碼 base.OnContinue(); } protected override void OnShutdown() { //系統即將關閉執行代碼 base.OnShutdown(); }
除此以外還有一個Program.cs文件:打開看下。編輯器
使得一個Windows服務程序可以正常運行,咱們須要像建立通常應用程序那樣爲它建立一個程序的入口點。在Windows服務程序中,咱們也是在Main()函數中完成這個操做的。首先咱們在Main()函數中建立一個Windows服務的實例,該實例應該是ServiceBase類的某個子類的對象,而後咱們調用由基類ServiceBase類定義的一個Run()方法。然而Run()方法並不就開始了Windows服務程序,咱們必須經過前面提到的服務控制管理器調用特定的控制功能來完成Windows服務程序的啓動,也就是要等到該對象的OnStart()方法被調用時服務才真正開始運行。若是你想在一個Windows服務程序中同時啓動多個服務,那麼只要在Main()函數中定義多個ServiceBae類的子類的實例對象就能夠了,方法就是建立一個ServiceBase類的數組對象,使得其中的每一個對象對應於某個咱們已預先定義好的服務。ide
/// <summary> /// 應用程序的主入口點。 /// </summary> static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1(), new Service2() }; ServiceBase.Run(ServicesToRun); }
若是你在你須要的函數裏面寫過你須要的方法後,點運行則不可運行。函數
一、安裝須要用,這個小玩意能夠在網上下載到的。測試
二、把他放到你編寫好的服務程序/bin/Debug文件夾下。this
三、打開
四、用命令讀到你服務.exe文件夾下。
五、運行 installutil.exe
六、安裝服務命令: installutil yourservices.exe
七、卸載服務命令: installutil /u yourservices.exe
注意的是:安裝跟卸載須要保證程序是同樣的,沒有變動過的,要不會提示卸載不乾淨。也就是在已安裝過服務的時候,不要在vs中修改你的程序。
保證你的服務已安裝成功,且處於啓動模式。
點調試--->> 附加到進程
便可。
注意的是:
打開任務管理器:結束進程。