Windows 服務 同時啟動多個服務

?Windows?服務?同時啟動多個服務

?獨立觀察員?2019.02.26

最近需要開發 Windows Service 程序,之前沒有接觸過,所以把了解到的一些東西記錄下來。

Windows 服務程序可以簡單理解為需要長時間在后臺運行, 而又不需要界面顯示的程序,在計算機管理 --> 服務和應用程序 --> 服務中可以看到:

4bbb7b6ec421c74aac26289f24601a73.png

我們先來新建一個 "Windows 服務" 項目,具體可參考《C# 編寫 Windows Service(windows 服務程序)》(https://www.cnblogs.com/bluestorm/p/3510398.html)一文。

邏輯寫在繼承于 ServiceBase 類的類中,該類型的類通過添加 "Windows 服務" 來生成:

d9d51e4722e5e5a0d02c22dc23b5cfa5.png

雙擊生成的類文件,打開的是一個設計頁面,可點擊切換到代碼視圖:

0dae847f19b3daace2bd0fc7a6692ef8.png

代碼視圖中可以看到,是繼承于 ServiceBase 類的,主要邏輯寫在 OnStart 和 OnStop 方法中:

27275dffb50a0120e1deb17c376634e0.png

在 Service1 的設計頁面右鍵 -->"添加安裝程序",生成 ProjectInstaller.cs ,也是個設計頁面,包含一個 serviceProcessInstaller1 組件和一個 serviceInstaller1 組件:

6f5e15ac593f6ac9f22983c6c754bb1d.png

其中 serviceProcessInstaller1 屬性中一般將 Account 的值改為 LocalSystem :

2cb467b55b4f872d033feb9c06235c30.png

而 serviceInstaller1 的屬性中,Description 是描述信息,DisplayName 是顯示的名稱,都在開頭提到的系統服務管理頁面中顯示。ServiceName 指定了程序中使用該服務要用的名稱。StartType 一般選為 Automatic,代表了自動啟動:

27a64b8af73a44979c5f6114524adbae.png

然后就是安裝和啟動了,有好幾種方法,本文采用 InstallUtil.exe 和?批處理?結合的方式。InstallUtil.exe 命令行工具在 % SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe 路徑下,可以直接帶路徑使用,也可以拷到項目中使用。

下面給出批出理代碼:

  1. 安裝和啟動服務

CD /D "%~dp0"
InstallUtil WindowsServiceTest.exe
net start Service1
net start Service2
pause

其中第一行是 cd 到當前目錄。第二行是安裝服務,WindowsServiceTest.exe 是服務所在的程序名。第三行是啟動其中的 Service1 服務。

2、單獨啟動服務

net start Service1
net start Service2
pause

3、停止服務

net stop Service1
net stop Service2
pause

4、卸載服務

CD /D "%~dp0"
installutil /u WindowsServiceTest.exe
pause

大家可能發現了,除了 Service1,里面還有個 Service2,這就是接下來要講的安裝兩個以上服務的方法。(只使用一個服務的話,要把 Service2 刪除)

首先按照之前的方法添加 Service2,然后照樣添加安裝程序,會出現在之前的地方(新增了一個 serviceInstaller2):

07548c209a6fe92ab24a4befb535889b.png

接下來打開 Projectlnstaller.Designer.cs 文件,這個是 VS 自動生成的,本來是不需要我們修改的,但這里似乎有一個 bug (參考:《[c# windows?服務?一個進程?多個服務的使用](https://blog.csdn.net/dkdhn/article/details/50126819)》):

d6d25e42baa95ec386d3b656f34c0495.png

就是上圖中的紅框框住的一句(AddRange 方法中的 this.serviceInstaller2)并沒有自動添加上,所以我們手動加上。

然后在程序入口函數 Program.Main () 中添加 Service2 的調用:

1b7dfe81920dc60fd89771ccfba1468d.png

這樣之后就可以生成程序了,然后以管理員身份運行批處理文件(安裝和啟動服務.bat):

c76a78d103c91fb4bfdb656b19fd43c6.png

然后在服務管理頁面就可以看到了:

d69e575e06c9b763ab4b880ec5edd2f5.png

再運行 卸載服務.bat :

b4caa31341572d032b69349ebd4eddb9.png

程序功能也都生效了:

2a6023f1ac038857918ef89a9b12e093.png

好了,就說這些了,最后提供下示例代碼地址:https://gitee.com/dlgcy/WindowsServiceTest

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285915.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285915.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285915.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python3.6學習筆記(四)

錯誤、調試和測試 程序運行中,可能會遇到BUG、用戶輸入異常數據以及其它環境的異常,這些都需要程序猿進行處理。Python提供了一套內置的異常處理機制,供程序猿使用,同時PDB提供了調試代碼的功能,除此之外,…

如何恢復master數據庫

今天,重裝Sql2000數據庫后,在恢復master數據庫時出現了錯誤,提示為“當試圖還原master數據庫時,必須以單用戶模式使用restoredatabase,restore database操作異常終止”。在網上搜索了一下,發現了一篇介紹比較詳細的&am…

一、基本remix環境及HelloWord contract《2022 solidity8.+ 版本教程到實戰》

這個系列是 solidity8.版本的教程,既然學習了 solidity 就應該明白智能合約是啥,在此系列文章中將不贅述基礎概念,只講解對應的語法,希望讀者理解。 環境 solidity 版本:8.(2022年9月8日 最新版本) IDE:h…

遙感空間尺度轉換技術(升尺度和降尺度)

遙感圖像的一個基本特征是空間分辨率。目前已經可以有效獲取大量不同空間分辨率遙感數據。 尺度和尺度轉換已經成為遙感的核心問題之一,人們已經從不同角度提出了這一問題。尺度轉換分為兩種: 升尺度:從高分辨率到低分辨率的轉換;降尺度:從低分辨率到高分辨率的轉換。文章…

linux command1

#列出指定用戶(當前用戶)的組信息 groups #將指定的用戶添加(-a)到指定的組內(改組必須已經存在)或指定用戶從指定的組中刪除(-d) gpasswd –a/-d username groupname #添加組 groupadd grou…

C語言試題六十八之請編寫函數實現親密數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

three.js插件實現立體動感視頻播放效果

2019獨角獸企業重金招聘Python工程師標準>>> three.js插件實現立體動感視頻播放效果 效果描述: 立體式視頻播放效果 大家使用的時候可得注意了,它并不支持低版本瀏覽器 使用方法: 1、將body中的代碼部分拷貝到你需要的地方,將視頻…

Python3.6學習筆記(五)

網絡編程 網絡程序出現的比互聯網要早很多,實現方式主要依靠網絡上不同主機間進程的通信,通信協議最重要的是TCP/IP協議。在這兩個協議基礎上還有很多更高級的協議,包括HTTP、SMTP等。要進行兩個主機間的網絡通信,必須四個元素&a…

ArcGIS實驗教程——實驗三十三:ArcScan自動矢量化完整案例教程

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據)》 文章目錄 1 ArcScan 簡介2. ArcScan使用前提及注意事項3. ArcGIS自動矢量化案例1 ArcScan 簡介 ArcScan是ArcGIS Desktop的打展模塊,是柵格數據矢量化的套工具集, 用這些工具,可以創建要素,將…

搶先體驗全新標簽頁!Windows 11 必備小工具下載

面向 Dev 頻道的 Windows 預覽體驗成員,微軟近日推送了 Windows 11 新預覽版,為文件資源管理器帶來了全新標簽頁功能。Windows 11 文件資源管理器全新標簽頁介紹在 Windows 11 預覽版中,新功能分別向 A 和 B 兩組用戶的電腦推送測試。A 用戶的…

thymeleaf模板的使用(轉)

作者:純潔的微笑 出處:http://www.ityouknow.com/ 在上篇文章springboot(二):web綜合開發中簡單介紹了一下thymeleaf,這篇文章將更加全面詳細的介紹thymeleaf的使用。thymeleaf 是新一代的模板引擎,在spring4.0中推薦使…

二、基本類型及函數使用《2022 solidity8.+ 版本教程到實戰》

一、基本變量類型 solidity 中的基本變量類型與一般編程中類似: // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; contract Hello{string public say"Hello 1_bit";int public ival-1;uint public uval1;address public aval0xd9145CCE52…

Ruby 學習筆記3

在Ruby中有很多方法是以?和!號結尾的 “?”被用于標示謂詞,即返回Boolean直的方法,如Array.empty?(判斷數組中元素是否為空) “!”出現在方法名尾部的感嘆號表明使用該方法是需要多加小心。許多Ruby的核心類都定義了 成對的方…

C語言試題六十九之請編寫函數判斷一個數是不是素數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

Python3.6學習筆記(六)

WSGI Python Web Server Gateway Interface 規范學習 由于Python的靈活性,提供了多種方式可以作為服務端語言,包括Python編寫的服務器(Medusa)、Python處理模塊(mod_python),或者使用CGI、FastCGI方式觸發…

Markdown編輯器模板

這里寫自定義目錄標題歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants創建一個自定義列表如何創建一個注…

as3文本框的動態拖拽和編輯

如今非常多軟件都支持了編輯界面的文本拖拽和點擊編輯來直接改動數值, 這樣便于操作, 并且體驗性也好, 拋磚引玉吧 于是就用好久沒編寫的as3來寫了一下: 由于用的flash ide寫的沒有提示, 就臨時不做細節處理了, 假設用于project上會有點小問題, 只是不影響本效果展示 代碼: imp…

為 HttpClient 注冊自定義請求標頭

前言上次,我們介紹了《在 ASP.NET Core 中使用 HTTP 標頭傳播》。但是有時候,當服務間需要互相調用時,也需要將創建一些自定義標頭傳播到目標服務。比如, ServiceA 已經進行了身份驗證,那么當它調用 ServiceB 時&#…

圖片壓縮上傳Thumbnailator 插件

假如你現在還在為自己的技術擔憂,假如你現在想提升自己的工資,假如你想在職場上獲得更多的話語權,假如你想順利的度過35歲這個魔咒,假如你想體驗BAT的工作環境,那么現在請我們一起開啟提升技術之旅吧,詳情請…

jQuery實現登錄提示

實現效果&#xff1a;將鼠標聚焦到郵箱地址文本框時&#xff0c;文本框 內的“請輸入郵箱地址”文字將被清除&#xff1b; 若沒有輸入任何內容&#xff0c;鼠標移除后郵箱地址文本框被還原。 1 <!DOCTYPE html>2 <html>3 <head>4 <meta charset"…