1. 程式人生 > >使用Visual Studio 2015 Community 開發windows服務

使用Visual Studio 2015 Community 開發windows服務

  昨天研究在.NET下開發Windows服務程式,期間遇到一些小問題,這裡僅將自己的開發過程和需要注意的地方寫下和廣大網友分享……

   1、基礎

    Windows服務是指系統啟動時能夠自己執行的程式。Windows服務可以在沒有互動介面的情況下在後臺進行業務的處理。

  .NET下開發Windows服務需要幾個基本的類,它們在程式集System.ServiceProcess.dll和System.Configuration.Install.dll中,分別是:ServiceBase、ServiceInstaller、ServiceProcessInstaller、Installer,這幾個類是開發一個最簡單的Windows服務所必須的。

  2、使用Visual Studio 2015 Commnuity建立Windows服務專案

    

  在Classic Desktop(經典桌面程式)中選擇Windows Service專案。專案檔案結構如下:

  

  雙擊Service1.cs進入服務設計介面,設定ServiceName屬性(該屬性在下文中還會提及,請留意),該屬性是系統控制Windows服務的標識:

  

  這裡我將ServiceName屬性設定為Test,大家注意看屬性面板的上邊,發現這裡設定的是ServiceBase類的屬性。ServiceBase類是.NET中建立所有Windows服務的基類。在建立新的服務類時,必須從 ServiceBase 派生。

  接下來我們看下Service1.cs檔案的程式碼部分,可以看到裡面有個Service1類繼承自ServiceBase類,還有兩個重寫方法,OnStart和OnStop。OnStart中的程式碼將會在服務啟動之後執行,OnStop中的程式碼在服務停止時執行。除此之外還有OnPause、OnContinue等方法。這是我們編譯專案會在bin\Dubug資料夾下生成WindowsService1.exe檔案,這個檔案就是我們建立的Windows服務。是不是感覺很簡單?但是如果你以為Windows服務的建立工作到此為止就結束了,那就錯了。不信雙擊WindowsService1.exe執行試試……

3、Windows服務的安裝

  看到了吧,提示我們想要執行Windows服務要先安裝該服務

  

  提示資訊中提到了installutil.exe,這裡先不說它的用處。我們要想安裝剛剛建立的Windows服務,首先要在專案中建立安裝檔案,如圖:

  

  雙擊剛剛建立的Installer1.cs檔案會進入它的設計介面,這裡且不管設計介面,我們直接進入程式碼介面,會看到裡面有一個類:Installer1,它繼承自

System.Configuration.Install名稱空間下的Installer類,Installer 類是 .NET中所有自定義安裝程式的基類。

  首先我們在Installer1的建構函式中定義我們的服務程序安裝類(即上文提到的ServiceProcessInstaller)例項和服務安裝類(即上文提到的ServiceInstaller)例項

        public Installer1()
        {
            InitializeComponent();

            ServiceProcessInstaller spi = new ServiceProcessInstaller();
            spi.Account = ServiceAccount.LocalSystem;//設定服務要執行在什麼型別的賬號下

            //這裡可以建立多個ServiceInstaller例項
            ServiceInstaller si = new ServiceInstaller();
            si.ServiceName = "Test";//系統操作服務的標識,要和ServiceBase中設定的ServiceName屬性值相同
            si.DisplayName = "測試服務";//展示給使用者的服務名,即在控制面板中看到的服務名
            si.Description = "服務的描述資訊";
            si.StartType = ServiceStartMode.Manual;//服務的啟動方式,這裡設定為手動

            //最後記得把建立的例項新增到安裝列表中
            this.Installers.Add(si);
            this.Installers.Add(spi);
        }
View Code

  到此,對於安裝服務的基本資訊已經填寫完畢。接下來我們還需要重寫基類Installer中的兩個方法:

        //注意必須重寫Install和Uninstall方法,且在重寫方法中必須呼叫基類對應的方法,否則在安裝和解除安裝服務的過程中會出問題
        //小編就是因為沒有呼叫基類中的方法導致安裝和卸載出現問題
        //出此之外還有Commit、Rollback等方法
        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);
        }

        public override void Uninstall(IDictionary savedState)
        {
            base.Uninstall(savedState);
        }    
View Code

  

  這裡大家要注意一點,在Installer1類上使用了特性:RunInstaller(true),如果我們將特性的引數設為false,那麼安裝工具installutil將會忽略該類,我們在安裝服務時就不會安裝該類中指定的服務。

  完成上述步驟之後,我們再次編譯專案……

  在上文中我們提到了installutil.exe工具,它是用來安裝.NET編寫的Windows服務的工具,它的路徑是C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe。其中v4.0.30319是.NET的版本號,使用不同版本的.NET編寫Windows服務要使用對應的installutil.exe來安裝。

  我們開啟命令列或使用VS自帶的命令列工具,這裡我們使用VS自帶的命令列工具:Developer Command Prompt for VS2015來進行安裝工作。

  開啟命令列工具,輸入:installutil.exe Windows服務程式的路徑(這裡小編塗去了和個人資訊相關的部分)然後回車

  

  如使用系統的命令列工具就需要先跳轉到installutil.exe所在的路徑或者在命令列中指明它的路徑。

  回車之後會發現,Windows服務開始安裝了,在然後就會發現安裝出現了問題……

  

  對於這個問題的解決方式相當簡單,就是以管理員身份執行命令列工具即可(小編卻花費了很長的時間才悟出來這個道理)。

  以管理員身份執行命令列,再次執行安裝過程,我們可以看到安裝過程分為:安裝和提交兩步。

  安裝完成之後,我們可以在控制面板的服務管理器中看到剛剛安裝的服務:

  

  安裝完成之後我們來啟動服務,這裡使用命令列來啟動,也可以在服務管理器中啟動。

  

  大家注意到沒有?控制面板服務管理器中顯示的服務名稱是DisplayName屬性指定的名稱,而我們啟動服務時要使用ServiceName屬性指定的服務名,否則會提示我們服務名無效。

  服務的停止使用命令:net stop 服務名稱。

  服務的解除安裝使用installutil /u 服務程式路徑來完成。

  至此,在.NET中開發一個簡單的Windows服務的工作已經全部完成……

本文為作者原創,版權歸作者雪飛鴻所有。 轉載必須保留文章的完整性,且在頁面明顯位置處標明原文連結

如有問題, 請傳送郵件和作者聯絡。

相關推薦

使用Visual Studio 2015 Community 開發windows服務

  昨天研究在.NET下開發Windows服務程式,期間遇到一些小問題,這裡僅將自己的開發過程和需要注意的地方寫下和廣大網友分享……    1、基礎     Windows服務是指系統啟動時能夠自己執行的程式。Windows服務可以在沒有互動介面的情況下在後臺進行業務的處理。   .NET下開發Wind

Windows下OpenCV 3.4.0 + Visual Studio 2015開發環境的配置

OpenCV3.1.0+VS2015開發環境配置   摘要:         由於最近AR(增強現實)這個概念非常火爆,各種基於AR的應用及遊戲逐漸面向大眾,而在AR中最重要的兩個技術就是跟蹤識別和增強渲

使用Visual Studio(VS)開發Windows服務(WindowsService)的簡單流程

1、新增WindowsService專案 2、在設計介面點選檢視程式碼,在Server.Start()中定義執行體 2.1、Start()裡面如果有無限迴圈體需用Thread或Timer,否則啟動時會一直啟動,然後啟動失敗,實際程式在執行,無法關閉 2.2、使用Thread,不在Stop中主動釋放,

【VS開發Visual Studio 2015 無法解析的外部的符號 __vsnwprintf_s

IDE:Visual Studio 2015 作業系統:win 10   問題: 編譯的時候可能會遇到 ERROR LNK2019:無法解析的外部的符號 __vsnwprintf_s,或者是_sscanf,_sscanf_s等等一系列形如這樣的函式   疑

Windows Server R2 安裝Visual Studio 2015失敗!KB2919355

官方下載網站: https://www.microsoft.com/zh-CN/download/details.aspx?id=42334 包含了要求以及安裝過程和要求 若要開始下載,請單擊“下載”按鈕,然後執行以下操作之一,或者從“更改語言”中選擇另一種語言,然後單擊“更改”。

Windows 7+Visual Studio 2015下Caffe安裝(CPU/非GPU)

由於專案組安排跟進深度學習、目標檢測,準備先嚐試一下MTCNN,其網路執行需要Caffe,暫時又只有Windows 7系統,因此先準備安裝caffe-windows。其次,考慮用筆記本GPU跑可能會炸,因此準備安裝CPU版的。 按照README.md進行安裝,首先看到要

使用Visual Studio 2015 開發ASP.NET MVC 5 專案部署到Mono/Jexus

最新的Mono 4.4已經支援執行asp.net mvc5專案,有的同學聽了這句話就興高采烈的拿起Visual Studio 2015建立了一個mvc 5的專案,然後部署到Mono上,瀏覽下發現一堆錯誤出現,心中一萬隻草泥馬奔騰而來,這也叫支援嗎,這個問題是Visual Studio造成的,不相信的話可以使用

在windows10 下搭建 visual studio 2015 驅動程式開發環境

需要做的準備 一臺安裝好windwos10 的電腦(工作機) 下載windwos10 安裝包(用來安裝虛擬機器)這裡 下載最新版本的VirtualBox(虛擬機器軟體 也可以使用vmware)這裡 下載visual studio 2015 安裝包這裡 下載w

使用Visual Studio 2015開發Python Django

孫廣東   2016.6.24http://blog.csdn.net/u010019717VS 本身就是全宇宙最強的開發工具,  微軟官方開發和維護者.Net版的 python .  IronPython  。 開發python強大到折服!     安裝vs2015時要選擇

Visual Studio 2015】安全開發生命週期(SDL)檢查

    有的時候寫的程式碼明明沒有什麼問題就是編譯不過,我就覺得奇怪了。我是編譯通過的程式碼,怎麼就有問題呢?在VS2015執行,還真是有問題。看錯誤提示,是VS將這個函式的使用當做錯誤對待了!     在以前的VS版本中,檢測並不嚴格,對於很多警告,我們程式設計師通常都是忽

Visual Studio 2005中配置Windows Mobile 5.0開發環境

Visual Studio 2005無疑是開發Windows Mobile的最佳工具,其本身就集成了Windows Mobile開發環境,.Net Compact Framework也同時升級到了2.0,只是它自身所帶的模擬器是Windows CE 2003的,有些落後時代了

Arduino 高階教程 02:用 Visual Studio 2015 開發 Arduino 應用程式(一)

Arduino IDE 的缺點 雖然 Arduino 很流行很火爆,但是 Arduino IDE 卻非常、非常、非常弱。編寫程式碼很不方便,只能說提供了一個最基本的寫程式碼的工具而已,除錯程式碼也很不方便。而且,Arduino IDE 中寫程式碼,只能是把

Visual Studio 2015 開發環境

下載工具 在我們學習 C# 開發之前,先下載整合開發環境(IDE,Integrated Development Environment )。 下載地址:https://www.visualstudi

IP地址與域名之間的轉換(Windows + Visual Studio 2015)

注意:博主用的visual studio 2015,在windows除錯程式需要連結ws2_32.lib庫,才能正常執行程式。 開啟專案的“Property”->"Linker"->"

Visual Studio 2017 調試 windows server 2016 Docker Container

search ini table 必須 報錯 img eve rate cor   網上很多文章都是在win10下,用Docker for windows工具進行Docker的安裝部署的。用知道windows server 2016已經原生支持Docker了,其window

【Asp.Net Core】一、Visual Studio 2015 和 .NET Core 安裝

過濾器 int 3.2 屬性和方法 static 資料 c3p0 案例 handling 安裝 Visual Studio 和 .NET Core 1、安裝 Visual Studio Community 2015,選擇 Community 下載並執行默認安裝。Visual

Visual Studio 2015 update 3各版本下載地址

了解 dsc php post com static unit test label Visual Studio 2015 update 3各版本下載地址 標簽: VS2015update 3 2016-11-28 14:32 2899人閱讀 評論(0) 收藏 舉報

Visual Studio 2015 Update 1 安裝到最後 KB3022398 錯誤解決方法

content cal style 程序 修復 sof microsoft data key 最後一步遇到一個錯誤的確讓人心寒 只是我們還是得一步步解決。別去卸載重裝。太費時 首先打開 regedit 註冊表,依次進入: 1:HKEY_LOCA

微軟移除Visual Studio 2015中的UML

世紀 價值 rdquo arc 必須 lan uml 其中 產品 微軟已經在Visual Studio 2015中移除了UML(Unified Modeling Language,統一建模語言),原因是該語言使用率過低。因此微軟要優化產品結構,把好鋼用在刀刃上。 Visu

Microsoft Visual Studio 2015打開TFS大量報錯問題解決方案

tfs soft 嘗試 ima mic image 遇到 操作方法 cnblogs 用vs2015打開項目出現如圖錯誤,嘗試對XX項執行 添加 操作時遇到 XX 個錯誤,因為公司項目比較大,這個錯誤一直在彈,搜索了下,沒有找到出現類似問題的解決方案。 因為這個路徑是TFS