關於C#開發 windows服務進程


最近在做一個物聯網項目,其中有一個模塊是需要實現熱水工程的自動化補水和回水功能

實現的方式有多種,我選用了VS C#的Windows服務方式。

首先是創建一個windows服務項目(名稱隨你喜歡的規范命名,我這里就用默認的Service1)

VS自動為我們生成了一個什么都不干的空服務框架,雖然什么都不干,但是生成項目,安裝進服務管理中,也是能啟動和停止的。

麻省雖小,五臟俱全。

那么,一個能用的服務就產生了。我們要做的就是做修改和增加功能。

先來看看VS生成的服務框架都有哪些內容吧,了解了這些自然就懂得服務進程的開發了。PSp:)

首先來看看項目列表目錄:有五項:

1).Properties :

2).引用:

3).App.config:

這三項不用說了,太熟悉不過了。與WinForm一樣一樣的。

4).Program.cs:

這個也很熟悉了吧,進程入口。

static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;  //看到沒,這里定義的是一個數組。我們先不管ServiceBase是干什么的,看到Base應該想到是一個基類了。
ServicesToRun = new ServiceBase[] 
{
new Service1()   //這里只初始化了一個服務,那么我們就可以想得到,可以增加多個在這里。Service1是繼承自 ServiceBase,這里其實就是協變的應用,也可以用里氏轉換來理解。
};
ServiceBase.Run(ServicesToRun);//Run方法與WinForm里的 Run,控制台程序中的main是一個意思了。數組ServicesToRun里放了多少個都會啟動。
}
}

5).Service1.cs:

這個才是我們這個服務進程的核心所在。包含了一個設計器和代碼。

在設計器頁面,點擊右鍵選擇屬性或直接按F4,打開Service1這個類的屬性窗口。我們可以看到:

Name:不用多說,自然是這個服務類的類名了,改成你自己的。

ServiceName:服務進程的名字。windows操作系統維護服務進程時最喜歡這個屬性了。PS:)

AutoLog:默認為True,就是是不是設置為windows日志記錄的意思。

CanStop:字面含義就是能夠停止,也不能理解,設為True,可以在服務器管理中或net stop命令能讓它停止。

CanShutdown:能夠關機,意思就是在系統將要關機的時候,能接收系統發送過來的通知,可以做一些相應的處理。

這里是幾個常用的屬性了。其它的就不多說了。

現在我們來看一下代碼部分:

//VS 默認寫好了的代碼:

public partial class Service1 : ServiceBase  //沒錯吧,Service1就是繼承自ServiceBase的
{

//Timer time;//定時器
public Service1()
{
InitializeComponent();

//Todo:初始化一些字段值屬性值等,如:

//time.Interval=1000;

//time.Elapsed += time_Elapsed;
}

protected override void OnStart(string[] args)
{

//這個方法就是服務在啟動后執行的第一個方法。可以理解為一個類的實例的構造方法。

//服務啟動好后,你想要這個服務干些什么事,入口就在這里了。

File.AppendAllText("C:\Log.txt","服務已啟動");
}

protected override void OnStop()
{

//這里看名字也知道這是服務將要停止的時候執行的方法。像window的OnClose這么理解就對了。

File.AppendAllText("C:\Log.txt","服務已停止");
}

//這兩個方法是最基本需求的方法。還有幾個常用的如:

//OnShutdown(),//該方法指定應在系統即將關閉前執行的處理

//OnPause(),//指定要在服務暫停時采取的操作。

//OnContinue()//指定要在服務暫停后恢復正常功能時采取的操作。

//這些都是基類定義好的抽象方法,要在子類中實現的。所以在實現時要記得加上override。


}

關於服務進程的開發,理解了這些也就不難開發了。其它的功能就像開發WinForm和控制台程序一樣的開發就完事。

但是這時候生成的服務進程的exe是不能直接運行的,需要安裝到系統的服務器控制平台中才能啟動運行。

VS也進供了方法。

只需要在Service1.cs的設計界面,右鍵選擇添加安裝程序,會自動幫我們生成安裝程序:ProjectInstaller.cs,連引用都做好了。真貼心啊。PS:)

然后要做的就是重新生成項目。

然后在VS的工具中打開本機工具命令提示。

執行:installutil [你生成的服務進程的完整路徑]

O了。去服務管理控制器中體驗自己開發的服務器:)

刪除服務使用:installutil -u [你生成的服務進程的完整路徑]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM