LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 开发技巧创建强大的 Windows 服务程序

admin
2025年3月29日 20:56 本文热度 25

前言

在实际工作中,我们常常需要开发运行在后台、无需用户交互的应用程序。例如,定时读取西门子PLC的数据并保存到数据库中。为了实现这一目标,我们可以选择使用C#创建一个Windows服务。

在本篇文章中,将介绍如何基于C#创建一个Windows服务,并实现对西门子PLC的定时读取和保存功能,希望这篇文章能为大家提供有价值的参考。

Windows 服务说明

Windows 服务是一种特殊类型的应用程序,能够在系统启动时自动运行,并且无需用户登录即可执行。

它非常适合用于需要在后台持续运行的任务,尤其是在无人值守环境中。

适用场景

1、持续运行的任务

日志采集:定时收集系统或应用程序的日志数据。

网络代理:作为中间层处理网络请求和响应。

数据同步:定期同步不同系统之间的数据。

2、系统后台维护

自动更新:定时检查并安装系统或应用程序的更新。

性能监控:实时监控系统的性能指标(如CPU、内存使用率等)。

备份任务:定时执行数据备份操作。

3、无人值守环境中的任务

定时任务调度:在特定时间点执行预定义的任务。

设备监控:监控硬件设备的状态并进行相应处理(如读取PLC数据)。

核心特性

1、通过服务控制管理器(SCM)管理

SCM 是 Windows 操作系统中用于管理服务的一个组件。通过 SCM,可以方便地安装、启动、停止、暂停和删除服务。

2、与用户登录状态无关

Windows 服务可以在没有任何用户登录的情况下运行。这意味着即使没有用户活动,服务也可以在后台持续工作。

3、支持系统启动时自动运行

可以配置服务在系统启动时自动运行,确保关键任务始终处于激活状态。这对于需要高可用性的应用尤其重要。

4、灵活的权限设置

Windows 服务可以配置不同的权限级别,允许它们访问特定的系统资源或执行特定的操作。例如,某些服务可能需要管理员权限才能正常运行。

5、事件日志记录

Windows 服务可以将运行时的信息记录到系统事件日志中,便于后续的故障排查和审计。

6、多实例支持

在某些情况下,可以运行多个相同的服务实例,每个实例处理不同的任务或数据集。

开发与部署

开发工具:通常使用 C# 或其他 .NET 语言通过 Visual Studio 进行开发。

安装包:可以通过安装脚本或工具(如 sc.exe 命令行工具或第三方工具如 NSSM)来创建和管理服务。

调试与测试:可以使用 Visual Studio 的调试功能或专用的调试工具来测试服务的行为。

Windows服务创建

1、创建一个新项目,项目模板选择Windows服务(.Net Framework):

2、项目名称为WindowsServiceDemo,项目创建完成后如下

3、修改服务名称为SiemensPLCService:

4、在设计界面的空白处,右击弹窗中,选择添加安装程序:

5、点击添加安装程序之后,会自动添加一个ProjectInstaller界面,里面有两个组件,分别是serviceProcessInstaller和serviceInstaller。
6、选择serviceInstaller,在右侧的属性进行设置,主要可以设置以下属性:

  • ServiceName:服务名称

  • Description:服务描述

  • StartType:启动类型

7、接着选择ProjectInstaller进行设置,主要设置Account,指示用来运行此服务的账户类型,可以设置为LocalSystem。

8、设置完成之后,切换到SiemensPLCService这个类,点击切换到代码视图,我们可以看到后台有一些自动生成的代码:

我们可以在OnStart和OnStop里写一些代码逻辑。

9、写了一个简单的逻辑,就是每次服务启动或停止都会向指定的文件中写入一串信息。

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数据:"+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服务安装卸载

我们直接运行刚刚创建的服务,发现是无法运行的,提示如下:

接下来,我们使用这个exe来进行安装和卸载Windows服务。

1、首先,使用管理员权限打开cmd命令行,然后进入这个路径下,便于直接操作InstallUtil。cdC:\Windows\Microsoft.NET\Framework\v4.0.30319

2、安装服务命令:installutil  exe绝对路径 ;

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

打开服务,可以看到TestService这个名称的服务已经安装完成,

3、安装完成后,双击打开,可以启动服务,也可以手动停止:

4、观察D盘文件,可以看到PLC的数据每秒会存一次到指定文件中:
5、需要卸载服务时,可以执行卸载服务命令:installutil  exe绝对路径 -u ;

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

总结

在这篇文章中,探讨了 Windows 服务的核心特性,包括如何通过服务控制管理器(SCM)进行管理、如何配置服务在系统启动时自动运行,以及如何利用这些特性来实现各种后台任务。我们还讨论了开发和部署服务的基本步骤,希望能为你提供一个清晰的指导。


阅读原文:原文链接


该文章在 2025/3/31 11:29:54 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved