• 关于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 [你生成的服务进程的完整路径]

    前方有路望无尽,学海无期苦作舟! 十年之前,你不认识我,我不认识你。 十年之后,你涛声依旧,我猪转乾坤。 十年自学路有迷茫,十年探索路亦坎坷。 百般滋味,个中辛酸,各种纠结! 唯有志同道合,臭味相投的你能深深体会。 经验需要时间的积累,性格亦需要岁月的磨炼。 在下不才,但愿我博客对看到的朋友有丝丝帮助与启发。 别问我为何开发十年方开通博客,因为我只会说: 有美工设计师的开发者是多少的幸福啊!
  • 相关阅读:
    微信网页授权
    ci控制器与方法为何不能同名
    sql优化方案
    收藏了一些Notepad++快捷键
    获取IP地址
    php curl获取文件大小
    php图片压缩两个类
    PHP生成PDF完美支持中文,解决TCPDF乱码
    tcpdf函数
    Hibernate 配置
  • 原文地址:https://www.cnblogs.com/CFive/p/7482625.html
Copyright © 2020-2023  润新知