圖解如何使用C#創(chuàng)建Windows服務(wù)
前言
在實(shí)際應(yīng)用過(guò)程中,有時(shí)候我們希望開發(fā)的程序,不需要界面,直接開機(jī)就可以長(zhǎng)時(shí)間運(yùn)行,這時(shí)候,我們可以考慮做成一個(gè)Windows服務(wù)。
這篇文章跟大家介紹一下,如何基于C#實(shí)現(xiàn)Windows服務(wù)的創(chuàng)建、安裝、啟動(dòng)、停止和卸載。
Windows服務(wù)介紹
Microsoft Windows 服務(wù)能夠創(chuàng)建在它們自己的 Windows 會(huì)話中可長(zhǎng)時(shí)間運(yùn)行的可執(zhí)行應(yīng)用程序。這些服務(wù)可以在計(jì)算機(jī)啟動(dòng)時(shí)自動(dòng)啟動(dòng),可以暫停和重新啟動(dòng)而且不顯示任何用戶界面。這使服務(wù)非常適合在服務(wù)器上使用,或任何時(shí)候,為了不影響在同一臺(tái)計(jì)算機(jī)上工作的其他用戶,需要長(zhǎng)時(shí)間運(yùn)行功能時(shí)使用。還可以在不同于登錄用戶的特定用戶賬戶或默認(rèn)計(jì)算機(jī)賬戶的安全上下文中運(yùn)行服務(wù)。
創(chuàng)建Windows服務(wù)
1、創(chuàng)建一個(gè)新項(xiàng)目,項(xiàng)目類型選擇Windows服務(wù),如下圖所示:

2、項(xiàng)目名稱修改為thinger.WindowsServiceDemo,創(chuàng)建完成界面如下所示:

3、為了方便區(qū)分,將類名Service1改成MyService。

4、在設(shè)計(jì)界面,右擊鼠標(biāo),會(huì)出現(xiàn)如下彈窗,選擇添加安裝程序,并點(diǎn)擊添加安裝程序。

5、點(diǎn)擊添加安裝程序之后,會(huì)自動(dòng)添加一個(gè)ProjectInstaller界面,里面有兩個(gè)組件,分別是serviceProcessInstaller和serviceInstaller。
6、先選擇serviceInstaller進(jìn)行屬性設(shè)置,主要可以設(shè)置以下屬性:
- ServiceName:服務(wù)名稱,這個(gè)后續(xù)會(huì)使用到。
- Description:描述,可以自己添加一下說(shuō)明
- StartType:?jiǎn)?dòng)類型,可以設(shè)置為手動(dòng)或自動(dòng)

7、接著選擇ProjectInstaller進(jìn)行設(shè)置,主要設(shè)置Account,指示用來(lái)運(yùn)行此服務(wù)的賬戶類型,可以設(shè)置為L(zhǎng)ocalSystem
8、設(shè)置完成之后,切換到MyService這個(gè)類,點(diǎn)擊切換到代碼視圖,我們可以看到后臺(tái)有一些自動(dòng)生成的代碼:
public partial class MyService : ServiceBase
{
public MyService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}從名稱可以看出,這里重寫了OnStart和OnStop接口,可以在這里寫一些啟動(dòng)服務(wù)和停止服務(wù)的邏輯。
9、寫了一個(gè)簡(jiǎn)單的邏輯,就是每次服務(wù)啟動(dòng)或停止都會(huì)向指定的文件中寫入一串信息。
protected override void OnStart(string[] args)
{
WriteInfo("服務(wù)啟動(dòng)");
}
protected override void OnStop()
{
WriteInfo("服務(wù)停止");
}
private string filePath = @"D:\ServiceLog.txt";
private void WriteInfo(string info)
{
using (FileStream stream = new FileStream(filePath, FileMode.Append))
{
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine($"{DateTime.Now},{info}");
}
}
}10、點(diǎn)擊項(xiàng)目,右擊生成。

11、這樣,一個(gè)簡(jiǎn)單的Windows服務(wù)就創(chuàng)建完成了。
安裝卸載Windows服務(wù)
我們直接運(yùn)行剛剛創(chuàng)建的服務(wù),發(fā)現(xiàn)是無(wú)法運(yùn)行的,提示使用installutil.exe來(lái)運(yùn)行。

如果安裝了VS,這個(gè)exe應(yīng)用程序在C盤里可以找到的,具體路徑為:C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe
接下來(lái),我們使用這個(gè)exe來(lái)進(jìn)行安裝和卸載Windows服務(wù)。
1、首先,使用管理員權(quán)限打開CMD,然后進(jìn)入這個(gè)路徑下,便于直接操作InstallUtil。


2、安裝服務(wù)命令:installutil exe絕對(duì)路徑 ;卸載服務(wù)命令:installutil exe絕對(duì)路徑 -u ;查看安裝執(zhí)行結(jié)果:


打開服務(wù),可以看到TestService這個(gè)名稱的服務(wù)已經(jīng)安裝完成,

3、安裝完成后,雙擊打開,可以啟動(dòng)服務(wù):

4、也可以手動(dòng)停止服務(wù):
5、觀察D盤文件,是否存在信息:

6、卸載服務(wù)結(jié)果:

到此這篇關(guān)于圖解如何使用C#創(chuàng)建Windows服務(wù) 的文章就介紹到這了,更多相關(guān)C#創(chuàng)建Windows服務(wù) 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C#創(chuàng)建Windows服務(wù)的圖文教程
- C#創(chuàng)建Windows服務(wù)與服務(wù)的安裝、卸載
- C#創(chuàng)建控制Windows服務(wù)
- C#用Topshelf創(chuàng)建Windows服務(wù)的步驟分享
- C#創(chuàng)建Windows服務(wù)的實(shí)現(xiàn)方法
- 使用C#創(chuàng)建Windows服務(wù)的實(shí)例代碼
- C#通過(guò)創(chuàng)建Windows服務(wù)啟動(dòng)程序的方法詳解
- c#創(chuàng)建windows服務(wù)入門教程實(shí)例
- c#創(chuàng)建windows服務(wù)(Windows Services)詳細(xì)步驟
- Visual Studio C#創(chuàng)建windows服務(wù)程序
相關(guān)文章
C#調(diào)用VB進(jìn)行簡(jiǎn)繁轉(zhuǎn)換的方法
這篇文章主要介紹了C#調(diào)用VB進(jìn)行簡(jiǎn)繁轉(zhuǎn)換的方法,通過(guò)調(diào)用VB的動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)繁簡(jiǎn)轉(zhuǎn)換的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02
C#使用正則表達(dá)式實(shí)現(xiàn)漢字轉(zhuǎn)拼音
這篇文章主要為大家詳細(xì)介紹了C#如何使用正則表達(dá)式實(shí)現(xiàn)漢字轉(zhuǎn)拼音的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
C# LiteDB處理時(shí)間序列數(shù)據(jù)的高性能解決方案
LiteDB作為.NET生態(tài)下的輕量級(jí)嵌入式NoSQL數(shù)據(jù)庫(kù),一直是時(shí)間序列處理的優(yōu)選方案,本文將為大家大家簡(jiǎn)單介紹一下LiteDB處理時(shí)間序列數(shù)據(jù)的高性能解決方案,希望對(duì)大家有所幫助2025-08-08
c#創(chuàng)建vc可調(diào)用的com組件方法分享
本文詳細(xì)闡述如何用C#創(chuàng)建一個(gè)COM組件,并能用VC6.0等調(diào)用,大家參考使用2013-12-12
C#如何實(shí)現(xiàn)dataGridView動(dòng)態(tài)綁定數(shù)據(jù)
這篇文章主要介紹了C#如何實(shí)現(xiàn)dataGridView動(dòng)態(tài)綁定數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
C# AE之返回上一級(jí)和下一級(jí)的實(shí)戰(zhàn)操作
這篇文章主要介紹了C# AE之返回上一級(jí)和下一級(jí)的實(shí)戰(zhàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01

