一文教你如何使用C#開發(fā)一個(gè)Windows后臺(tái)服務(wù)
前言
在實(shí)際應(yīng)用過程中,有時(shí)候我們希望開發(fā)的程序不需要界面,直接開機(jī)就可以長時(shí)間運(yùn)行。例如服務(wù)器監(jiān)控、數(shù)據(jù)采集等場(chǎng)景,這時(shí)候我們可以考慮將程序做成一個(gè)Windows服務(wù)。
本文將詳細(xì)介紹如何基于C#實(shí)現(xiàn)Windows服務(wù)的創(chuàng)建、安裝、啟動(dòng)、停止和卸載,并展示具體的代碼示例和操作步驟。
項(xiàng)目介紹
Microsoft Windows 服務(wù)能夠創(chuàng)建在它們自己的Windows會(huì)話中可長時(shí)間運(yùn)行的可執(zhí)行應(yīng)用程序。這些服務(wù)可以在計(jì)算機(jī)啟動(dòng)時(shí)自動(dòng)啟動(dòng),可以暫停和重新啟動(dòng)且不顯示任何用戶界面。
這使得服務(wù)非常適合在服務(wù)器上使用,或任何時(shí)候?yàn)榱瞬挥绊懺谕慌_(tái)計(jì)算機(jī)上工作的其他用戶而需要長時(shí)間運(yùn)行功能時(shí)使用。還可以在不同于登錄用戶的特定用戶賬戶或默認(rèn)計(jì)算機(jī)賬戶的安全上下文中運(yùn)行服務(wù)。
項(xiàng)目功能
1、創(chuàng)建Windows服務(wù):通過Visual Studio創(chuàng)建一個(gè)Windows服務(wù)項(xiàng)目。
2、安裝與卸載服務(wù):使用installutil.exe工具進(jìn)行服務(wù)的安裝和卸載。
3、啟動(dòng)與停止服務(wù):通過命令行或Windows服務(wù)管理器啟動(dòng)和停止服務(wù)。
4、日志記錄:每次服務(wù)啟動(dòng)或停止時(shí),向指定文件寫入信息。
項(xiàng)目特點(diǎn)
1、無需用戶界面:適合后臺(tái)長期運(yùn)行的應(yīng)用程序。
2、自動(dòng)啟動(dòng):可以在系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行服務(wù)。
3、安全上下文:支持在不同的用戶賬戶下運(yùn)行服務(wù)。
4、日志功能:便于調(diào)試和監(jiān)控服務(wù)運(yùn)行狀態(tài)。
項(xiàng)目技術(shù)
- C#:用于編寫Windows服務(wù)的核心邏輯。
- Visual Studio:用于創(chuàng)建和編譯Windows服務(wù)項(xiàng)目。
- InstallUtil.exe:用于安裝和卸載Windows服務(wù)的工具。
- FileStream 和 StreamWriter:用于文件操作,記錄服務(wù)啟動(dòng)和停止的日志信息。
創(chuàng)建Windows服務(wù)
1、創(chuàng)建新項(xiàng)目
首先,在Visual Studio中創(chuàng)建一個(gè)新的Windows服務(wù)項(xiàng)目,命名為thinger.WindowsServiceDemo。

2、修改類名
將默認(rèn)生成的服務(wù)類Service1修改為更具描述性的名稱MyService。

3、添加安裝程序
在設(shè)計(jì)視圖中右擊鼠標(biāo),選擇“添加安裝程序”,這會(huì)自動(dòng)生成一個(gè)包含serviceProcessInstaller和serviceInstaller的ProjectInstaller組件。

4、設(shè)置屬性
設(shè)置serviceInstaller的屬性:
ServiceName:服務(wù)名稱。Description:服務(wù)描述。StartType:啟動(dòng)類型(手動(dòng)或自動(dòng))。

設(shè)置serviceProcessInstaller的Account屬性為LocalSystem。
5、編寫服務(wù)邏輯
在MyService類中重寫OnStart和OnStop方法,實(shí)現(xiàn)服務(wù)啟動(dòng)和停止時(shí)的日志記錄功能。
public partial class MyService : ServiceBase
{
public MyService()
{
InitializeComponent();
}
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}");
}
}
}
}
6、生成項(xiàng)目
點(diǎn)擊項(xiàng)目,右擊并選擇"生成"來編譯項(xiàng)目。

安裝與卸載Windows服務(wù)
1、使用InstallUtil.exe
如果安裝了Visual Studio,installutil.exe位于以下路徑:C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe
使用管理員權(quán)限打開CMD,進(jìn)入上述路徑后執(zhí)行以下命令進(jìn)行服務(wù)的安裝和卸載:
安裝服務(wù):
installutil "服務(wù)exe絕對(duì)路徑"
卸載服務(wù):
installutil "服務(wù)exe絕對(duì)路徑" -u
2、啟動(dòng)與停止服務(wù)
安裝完成后,可以通過Windows服務(wù)管理器啟動(dòng)和停止服務(wù)。

3、檢查日志文件
查看D盤上的日志文件,確認(rèn)服務(wù)啟動(dòng)和停止的信息是否正確記錄。

總結(jié)
本文詳細(xì)介紹了如何基于C#實(shí)現(xiàn)Windows服務(wù)的創(chuàng)建、安裝、啟動(dòng)、停止和卸載。
通過使用Visual Studio和installutil.exe工具,開發(fā)者可以輕松地將應(yīng)用程序轉(zhuǎn)換為Windows服務(wù),從而滿足后臺(tái)長期運(yùn)行的需求。不管是服務(wù)器監(jiān)控還是數(shù)據(jù)采集,都能提供強(qiáng)大的支持。
到此這篇關(guān)于一文教你如何使用C#開發(fā)一個(gè)Windows后臺(tái)服務(wù)的文章就介紹到這了,更多相關(guān)C#開發(fā)Windows后臺(tái)服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)帶百分比的進(jìn)度條功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)帶百分比的進(jìn)度條功能,分析了帶百分比進(jìn)度條的功能需求并結(jié)合實(shí)例形式給出了具體實(shí)現(xiàn)步驟與相關(guān)操作方法,需要的朋友可以參考下2017-05-05
C#開發(fā)微信門戶及應(yīng)用(2) 微信消息處理和應(yīng)答
文章主要為大家詳細(xì)介紹了C#開發(fā)微信門戶及應(yīng)用第二篇,微信消息處理和應(yīng)答,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
C#調(diào)用sql2000存儲(chǔ)過程方法小結(jié)
這篇文章主要介紹了C#調(diào)用sql2000存儲(chǔ)過程的方法,以實(shí)例形式分別對(duì)調(diào)用帶輸入?yún)?shù)及輸出參數(shù)的存儲(chǔ)過程進(jìn)行了詳細(xì)分析,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10
C#?Math中常用數(shù)學(xué)運(yùn)算的示例詳解
Math?為通用數(shù)學(xué)函數(shù)、對(duì)數(shù)函數(shù)、三角函數(shù)等提供常數(shù)和靜態(tài)方法,使用起來非常方便。這篇文章主要為大家介紹幾個(gè)常用的數(shù)學(xué)運(yùn)算的使用,需要的可以參考一下2022-11-11
C#游戲開發(fā)之實(shí)現(xiàn)俄羅斯方塊游戲
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)經(jīng)典俄羅斯方塊游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
C# Winform實(shí)現(xiàn)自定義漂亮的通知效果
這篇文章主要介紹了C# Winform實(shí)現(xiàn)自定義漂亮的通知效果,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08

