欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 開發(fā)技巧創(chuàng)建強(qiáng)大的 Windows 服務(wù)程序

admin
2025年3月29日 20:56 本文熱度 63

前言

在實際工作中,我們常常需要開發(fā)運(yùn)行在后臺、無需用戶交互的應(yīng)用程序。例如,定時讀取西門子PLC的數(shù)據(jù)并保存到數(shù)據(jù)庫中。為了實現(xiàn)這一目標(biāo),我們可以選擇使用C#創(chuàng)建一個Windows服務(wù)。

在本篇文章中,將介紹如何基于C#創(chuàng)建一個Windows服務(wù),并實現(xiàn)對西門子PLC的定時讀取和保存功能,希望這篇文章能為大家提供有價值的參考。

Windows 服務(wù)說明

Windows 服務(wù)是一種特殊類型的應(yīng)用程序,能夠在系統(tǒng)啟動時自動運(yùn)行,并且無需用戶登錄即可執(zhí)行。

它非常適合用于需要在后臺持續(xù)運(yùn)行的任務(wù),尤其是在無人值守環(huán)境中。

適用場景

1、持續(xù)運(yùn)行的任務(wù)

日志采集:定時收集系統(tǒng)或應(yīng)用程序的日志數(shù)據(jù)。

網(wǎng)絡(luò)代理:作為中間層處理網(wǎng)絡(luò)請求和響應(yīng)。

數(shù)據(jù)同步:定期同步不同系統(tǒng)之間的數(shù)據(jù)。

2、系統(tǒng)后臺維護(hù)

自動更新:定時檢查并安裝系統(tǒng)或應(yīng)用程序的更新。

性能監(jiān)控:實時監(jiān)控系統(tǒng)的性能指標(biāo)(如CPU、內(nèi)存使用率等)。

備份任務(wù):定時執(zhí)行數(shù)據(jù)備份操作。

3、無人值守環(huán)境中的任務(wù)

定時任務(wù)調(diào)度:在特定時間點執(zhí)行預(yù)定義的任務(wù)。

設(shè)備監(jiān)控:監(jiān)控硬件設(shè)備的狀態(tài)并進(jìn)行相應(yīng)處理(如讀取PLC數(shù)據(jù))。

核心特性

1、通過服務(wù)控制管理器(SCM)管理

SCM 是 Windows 操作系統(tǒng)中用于管理服務(wù)的一個組件。通過 SCM,可以方便地安裝、啟動、停止、暫停和刪除服務(wù)。

2、與用戶登錄狀態(tài)無關(guān)

Windows 服務(wù)可以在沒有任何用戶登錄的情況下運(yùn)行。這意味著即使沒有用戶活動,服務(wù)也可以在后臺持續(xù)工作。

3、支持系統(tǒng)啟動時自動運(yùn)行

可以配置服務(wù)在系統(tǒng)啟動時自動運(yùn)行,確保關(guān)鍵任務(wù)始終處于激活狀態(tài)。這對于需要高可用性的應(yīng)用尤其重要。

4、靈活的權(quán)限設(shè)置

Windows 服務(wù)可以配置不同的權(quán)限級別,允許它們訪問特定的系統(tǒng)資源或執(zhí)行特定的操作。例如,某些服務(wù)可能需要管理員權(quán)限才能正常運(yùn)行。

5、事件日志記錄

Windows 服務(wù)可以將運(yùn)行時的信息記錄到系統(tǒng)事件日志中,便于后續(xù)的故障排查和審計。

6、多實例支持

在某些情況下,可以運(yùn)行多個相同的服務(wù)實例,每個實例處理不同的任務(wù)或數(shù)據(jù)集。

開發(fā)與部署

開發(fā)工具:通常使用 C# 或其他 .NET 語言通過 Visual Studio 進(jìn)行開發(fā)。

安裝包:可以通過安裝腳本或工具(如 sc.exe 命令行工具或第三方工具如 NSSM)來創(chuàng)建和管理服務(wù)。

調(diào)試與測試:可以使用 Visual Studio 的調(diào)試功能或?qū)S玫恼{(diào)試工具來測試服務(wù)的行為。

Windows服務(wù)創(chuàng)建

1、創(chuàng)建一個新項目,項目模板選擇Windows服務(wù)(.Net Framework):

2、項目名稱為WindowsServiceDemo,項目創(chuàng)建完成后如下

3、修改服務(wù)名稱為SiemensPLCService:

4、在設(shè)計界面的空白處,右擊彈窗中,選擇添加安裝程序:

5、點擊添加安裝程序之后,會自動添加一個ProjectInstaller界面,里面有兩個組件,分別是serviceProcessInstaller和serviceInstaller。
?
6、選擇serviceInstaller,在右側(cè)的屬性進(jìn)行設(shè)置,主要可以設(shè)置以下屬性:

  • ServiceName:服務(wù)名稱

  • Description:服務(wù)描述

  • StartType:啟動類型

7、接著選擇ProjectInstaller進(jìn)行設(shè)置,主要設(shè)置Account,指示用來運(yùn)行此服務(wù)的賬戶類型,可以設(shè)置為LocalSystem。

8、設(shè)置完成之后,切換到SiemensPLCService這個類,點擊切換到代碼視圖,我們可以看到后臺有一些自動生成的代碼:

我們可以在OnStart和OnStop里寫一些代碼邏輯。

9、寫了一個簡單的邏輯,就是每次服務(wù)啟動或停止都會向指定的文件中寫入一串信息。

private Plc siemens;
private CancellationTokenSource cts;
protected override void OnStart(string[] args)
{
    try
    {
        this.siemens = new Plc(CpuType.S7200Smart, "192.168.2.150"00);
        this.siemens.Open();

        cts = new CancellationTokenSource();
        Task.Run(async () =>
        {
            while (!cts.IsCancellationRequested)
            {
                try
                {
                    uint temp = Convert.ToUInt32(this.siemens.Read("DB1.DBD4"));
                    float val = temp.ConvertToFloat();
                    await Task.Delay(1000);
                    WriteInfo("讀取PLC數(shù)據(jù):"+val.ToString("f2"));
                }
                catch (Exception ex)
                {
                    WriteInfo(ex.Message);
                }
            }
            this.siemens.Close();
        });

    }
    catch (Exception ex)
    {
        WriteInfo(ex.Message);
    }
}
privatestring 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}");
        }
    }
}
protected override void OnStop()
{
    this.siemens?.Close();
}

Windows服務(wù)安裝卸載

我們直接運(yùn)行剛剛創(chuàng)建的服務(wù),發(fā)現(xiàn)是無法運(yùn)行的,提示如下:

接下來,我們使用這個exe來進(jìn)行安裝和卸載Windows服務(wù)。

1、首先,使用管理員權(quán)限打開cmd命令行,然后進(jìn)入這個路徑下,便于直接操作InstallUtil。cdC:\Windows\Microsoft.NET\Framework\v4.0.30319

2、安裝服務(wù)命令:installutil  exe絕對路徑 ;

installutil C:\Users\Administrator\Desktop\WindowsServiceDemo\WindowsServiceDemo\bin\Debug\WindowsServiceDemo.exe

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

3、安裝完成后,雙擊打開,可以啟動服務(wù),也可以手動停止:

4、觀察D盤文件,可以看到PLC的數(shù)據(jù)每秒會存一次到指定文件中:
?
5、需要卸載服務(wù)時,可以執(zhí)行卸載服務(wù)命令:installutil  exe絕對路徑 -u ;

installutil C:\Users\Administrator\Desktop\WindowsServiceDemo\WindowsServiceDemo\bin\Debug\WindowsServiceDemo.exe -u

總結(jié)

在這篇文章中,探討了 Windows 服務(wù)的核心特性,包括如何通過服務(wù)控制管理器(SCM)進(jìn)行管理、如何配置服務(wù)在系統(tǒng)啟動時自動運(yùn)行,以及如何利用這些特性來實現(xiàn)各種后臺任務(wù)。我們還討論了開發(fā)和部署服務(wù)的基本步驟,希望能為你提供一個清晰的指導(dǎo)。


閱讀原文:原文鏈接


該文章在 2025/3/31 11:29:54 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊、財務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved