九色91_成人精品一区二区三区中文字幕_国产精品久久久久一区二区三区_欧美精品久久_国产精品99久久久久久久vr_www.国产视频

Hello! 歡迎來到小浪云!


使用Visual Studio 2015 Community 開發(fā)windows服務(wù)


在.net環(huán)境中開發(fā)windows服務(wù)程序的過程中,我遇到了一些小問題,現(xiàn)將開發(fā)過程和需要注意的事項(xiàng)分享給大家,希望對(duì)你們有所幫助。

1. 基礎(chǔ)知識(shí)

Windows服務(wù)是指能夠在系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行的程序。這些服務(wù)可以在沒有用戶界面的情況下在后臺(tái)處理業(yè)務(wù)。

在.NET中開發(fā)Windows服務(wù)需要用到幾個(gè)基本的類,這些類位于System.ServiceProcess.dll和System.Configuration.Install.dll程序集中,包括:ServiceBase、ServiceInstaller、ServiceProcessInstaller和Installer。這些類是開發(fā)一個(gè)最簡(jiǎn)單的Windows服務(wù)所必需的。

2. 使用visual studio 2015 Community創(chuàng)建Windows服務(wù)項(xiàng)目

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)在“Classic Desktop(經(jīng)典桌面程序)”中選擇“Windows Service”項(xiàng)目。項(xiàng)目的文件結(jié)構(gòu)如下:

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)雙擊Service1.cs進(jìn)入服務(wù)設(shè)計(jì)界面,并設(shè)置ServiceName屬性(該屬性在后續(xù)會(huì)再次提到,請(qǐng)注意),該屬性是系統(tǒng)控制Windows服務(wù)的標(biāo)識(shí):

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)我將ServiceName屬性設(shè)置為“Test”。大家可以看到屬性面板上方,這里設(shè)置的是ServiceBase類的屬性。ServiceBase類是.NET中創(chuàng)建所有Windows服務(wù)的基類。在創(chuàng)建新的服務(wù)類時(shí),必須從ServiceBase類派生。

接下來查看Service1.cs文件的代碼部分,可以看到里面有一個(gè)Service1類繼承自ServiceBase類,并包含兩個(gè)重寫方法:OnStart和OnStop。OnStart中的代碼將在服務(wù)啟動(dòng)后運(yùn)行,OnStop中的代碼在服務(wù)停止時(shí)運(yùn)行。此外還有OnPause、OnContinue等方法。編譯項(xiàng)目后會(huì)在binDebug文件夾下生成WindowsService1.exe文件,這就是我們創(chuàng)建的Windows服務(wù)。是不是覺得很簡(jiǎn)單?但如果你以為Windows服務(wù)的創(chuàng)建工作到此結(jié)束,那就錯(cuò)了。嘗試雙擊WindowsService1.exe運(yùn)行看看……

3. Windows服務(wù)的安裝

你會(huì)發(fā)現(xiàn),提示我們要先安裝服務(wù)才能運(yùn)行:

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)提示信息中提到了installutil.exe,但我們先不討論它的用途。要安裝剛剛創(chuàng)建的Windows服務(wù),首先需要在項(xiàng)目中創(chuàng)建安裝文件,如圖所示:

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)雙擊剛剛創(chuàng)建的Installer1.cs文件進(jìn)入其設(shè)計(jì)界面,這里我們直接進(jìn)入代碼界面,會(huì)看到里面有一個(gè)類:Installer1,它繼承自System.Configuration.Install命名空間下的Installer類,Installer類是.NET中所有自定義安裝程序的基類。

在Installer1的構(gòu)造函數(shù)中,我們定義了服務(wù)進(jìn)程安裝類(即上文提到的ServiceProcessInstaller)和服務(wù)安裝類(即上文提到的ServiceInstaller)的實(shí)例:

public Installer1() {     InitializeComponent();     ServiceProcessInstaller spi = new ServiceProcessInstaller();     spi.Account = ServiceAccount.LocalSystem; // 設(shè)置服務(wù)要運(yùn)行在什么類型的賬號(hào)下     // 這里可以創(chuàng)建多個(gè)ServiceInstaller實(shí)例     ServiceInstaller si = new ServiceInstaller();     si.ServiceName = "Test"; // 系統(tǒng)操作服務(wù)的標(biāo)識(shí),要和ServiceBase中設(shè)置的ServiceName屬性值相同     si.DisplayName = "測(cè)試服務(wù)"; // 展示給用戶的服務(wù)名,即在控制面板中看到的服務(wù)名     si.Description = "服務(wù)的描述信息";     si.StartType = ServiceStartMode.Manual; // 服務(wù)的啟動(dòng)方式,這里設(shè)置為手動(dòng)     // 最后記得把創(chuàng)建的實(shí)例添加到安裝列表中     this.Installers.Add(si);     this.Installers.Add(spi); }

到此,安裝服務(wù)的基本信息已經(jīng)填寫完畢。接下來我們需要重寫基類Installer中的兩個(gè)方法:

// 注意必須重寫Install和Uninstall方法,且在重寫方法中必須調(diào)用基類對(duì)應(yīng)的方法,否則在安裝和卸載服務(wù)的過程中會(huì)出問題 // 小編就是因?yàn)闆]有調(diào)用基類中的方法導(dǎo)致安裝和卸載出現(xiàn)問題 // 除此之外還有Commit、Rollback等方法 public override void Install(IDictionary stateSaver) {     base.Install(stateSaver); } public override void Uninstall(IDictionary savedState) {     base.Uninstall(savedState); }

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)在這里要注意一點(diǎn),在Installer1類上使用了特性:RunInstaller(true),如果我們將特性的參數(shù)設(shè)為false,那么安裝工具installutil將會(huì)忽略該類,我們?cè)诎惭b服務(wù)時(shí)就不會(huì)安裝該類中指定的服務(wù)。

完成上述步驟后,我們?cè)俅尉幾g項(xiàng)目……

在上文中我們提到了installutil.exe工具,它是用來安裝.NET編寫的Windows服務(wù)的工具,路徑是C:Windowsmicrosoft.NETFrameworkv4.0.30319InstallUtil.exe。其中v4.0.30319是.NET的版本號(hào),使用不同版本的.NET編寫Windows服務(wù)需要使用對(duì)應(yīng)的installutil.exe來安裝。

我們打開命令行或使用VS自帶的命令行工具,這里我們使用VS自帶的命令行工具:Developer Command prompt for VS2015來進(jìn)行安裝工作。

打開命令行工具,輸入:installutil.exe Windows服務(wù)程序的路徑(這里小編涂去了和個(gè)人信息相關(guān)的部分)然后回車

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)如果使用系統(tǒng)的命令行工具,就需要先跳轉(zhuǎn)到installutil.exe所在的路徑或者在命令行中指明它的路徑。

回車之后會(huì)發(fā)現(xiàn),Windows服務(wù)開始安裝了,然后就會(huì)發(fā)現(xiàn)安裝出現(xiàn)了問題……

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)解決這個(gè)問題的辦法非常簡(jiǎn)單,就是以管理員身份運(yùn)行命令行工具即可(小編卻花費(fèi)了很長的時(shí)間才悟出這個(gè)道理)。

以管理員身份運(yùn)行命令行,再次執(zhí)行安裝過程,我們可以看到安裝過程分為:安裝和提交兩步。

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

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)安裝完成后我們來啟動(dòng)服務(wù),這里使用命令行來啟動(dòng),也可以在服務(wù)管理器中啟動(dòng)。

使用Visual Studio 2015 Community 開發(fā)windows服務(wù)大家注意到?jīng)]有?控制面板服務(wù)管理器中顯示的服務(wù)名稱是DisplayName屬性指定的名稱,而我們啟動(dòng)服務(wù)時(shí)要使用ServiceName屬性指定的服務(wù)名,否則會(huì)提示我們服務(wù)名無效。

服務(wù)的停止使用命令:net stop 服務(wù)名稱。

服務(wù)的卸載使用installutil /u 服務(wù)程序路徑來完成。

至此,在.NET中開發(fā)一個(gè)簡(jiǎn)單的Windows服務(wù)的工作已經(jīng)全部完成……

版權(quán)聲明

本文為作者原創(chuàng),版權(quán)歸作者雪飛鴻所有。轉(zhuǎn)載必須保留文章的完整性,且在頁面明顯位置處標(biāo)明原文鏈接。

如有問題,請(qǐng)發(fā)送郵件與作者聯(lián)系。

以上就是使用Visual Studio 2015 Community 開發(fā)

相關(guān)閱讀

主站蜘蛛池模板: 亚洲成人免费av | 精品av| 亚洲免费一区二区 | 国产精品揄拍一区二区 | 毛片99 | 国产精品美女www爽爽爽视频 | 91极品尤物在线播放国产 | 欧美激情视频一区二区三区在线播放 | 久久精品一区二区 | a级在线免费视频 | 婷婷色国产偷v国产偷v小说 | 国产高清久久久 | 成人一区二区三区在线观看 | 亚洲精品久久久久久久久久久 | 国产一区91精品张津瑜 | 鸳鸯谱在线观看高清 | 日韩电影中文字幕 | 亚洲天堂影院 | 日韩一二区 | 中文字幕在线一区 | 男女午夜激情视频 | 国产精品美女久久久 | 成人福利影院 | 免费麻豆视频 | 国产a级黄色录像 | 欧美久久久久久久 | 91久久精品 | 亚洲午夜精品在线观看 | 久久久久久久一区 | 国产第1页 | 福利视频网站 | 中国大陆高清aⅴ毛片 | 欧美一区二区在线观看视频 | 懂色中文一区二区在线播放 | 日韩欧美在 | 国产黄色大片在线观看 | 欧州一区二区三区 | 久久久久久免费观看 | 日韩中文字幕2019 | 伊人艹| 国产成人精品一区二 |