当前位置: 首页 > news >正文

使用C#创建安装Windows服务程序

在实际工作中,如果我们需要开发一个运行在后台,无需用户交互,不需要界面的应用程序,我们可以通过Windows服务来实现。

本文主要介绍如何基于C#创建一个Windows服务,来实现西门子PLC的定时读取保存。

一、Windows服务说明

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

它适合于以下场景:

  • 持续运行的任务(如日志采集、网络代理等)

  • 系统后台维护(如自动更新、性能监控)

  • 需要在无人值守环境中执行的任务

Windows 服务的核心特性:

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

  • 运行时与用户登录状态无关

  • 支持系统启动时自动运行

二、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这个类,点击切换到代码视图,我们可以看到后台有一些自动生成的代码:


public partial class SiemensPLCService : ServiceBase
{
    public SiemensPLCService()
    {
        InitializeComponent();
    }
    protected override void OnStart(string[] args)
    {
    }
    protected override void OnStop()
    {
    }
}

    我们可以在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", 0, 0);
            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);
        }
    }
    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}");
            }
        }
    }
    protected override void OnStop()
    {
        this.siemens?.Close();
    }

      三、Windows服务安装卸载

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

      图片

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

      1、首先,使用管理员权限打开cmd命令行,然后进入这个路径下,便于直接操作InstallUtil。

      cd C:\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

      图片

      相关文章:

    • 第一个Spring程序基于Spring6
    • ROS从小白到入门:知识点速通与面试指南
    • CatFlag 原理
    • 密码学(Public-Key Cryptography and Discrete Logarithms)
    • Docker 部署 XXL-JOB
    • 粘包半包以及Netty的解决办法
    • HCITool 的详细介绍、安装指南及使用说明
    • 合批Batching
    • MySQL 中利用 mysql.help_topic 实现行转列的深入剖析
    • 物理标签与逻辑标签的区别
    • 第七节 MATLAB数据类型
    • Pytorch使用手册—自定义 C++ 和 CUDA 扩展(专题五十二)
    • Altium Design元件管理笔记
    • PolyBench基准程序详解:编译器优化评测指标
    • IDEA 出现 Cannot access aliyunmaven in offline mode 问题解决方案
    • 【愚公系列】《高效使用DeepSeek》020-专业术语解释
    • 脚本语言 Lua
    • K8S学习之基础四十:K8S配置altermanager发送告警到钉钉群
    • 在麒麟系统(基于Ubuntu或Debuntu)的离线环境中创建本地APT仓库
    • 基于django美团美食销售数据分析与可视化系统设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
    • 市场监管总局等五部门约谈外卖平台企业
    • 欧元区财长会讨论国际形势及应对美国关税政策
    • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动
    • 19个剧团15台演出,上海民营院团尝试文旅融合新探索
    • 4月金融数据前瞻:受去年低基数因素影响,社融增量有望同比大幅多增
    • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长