如何作个本身想要的Window的服务了?

前言说明

  • 使用工具:VS2019
  • 思考为何要使用WindowService,它能作什么了?(后面解答)

一:什么是WindowService?(咱们作的是一个什么东西?)

        Microsoft Windows 服务(过去称为 NT 服务)容许用户建立可在其自身的 Windows 会话中长时间运行的可执行应用程序。(微软爸爸是这么解释,简单介绍)
        个人理解,它就是一个挂载在咱们系统上的服务,咱们系统上服务其实有不少,好比咱们的Sql数据库的服务:MSSQLSERVER,这个是启动数据库的一个服务,开启这个服务咱们才能链接本地的安装的SQL。那WindowService应该也是一个这样的服务,能够理解是一个可让咱们自定义开发的服务。
数据库

二:如何建立WindowService?(咱们知道是什么东西,怎么作?)

1.打开VS2019,类别选择服务,选择Windows服务类别

2.添加安装程序



安装以后,目录会添加新文件
windows

2.1看看这两个文件
serviceInstaller1:


用的多的属性:服务器

  • DelayedAutoStart:是否自动启动
  • Descrition:介绍服务(自定义)
  • DisplayName:标识服务器友好名称(自定义)
serviceProcessInstaller1:

  • Account:设置为LocalSystem(运行此服务的帐户类型)

到此,一个服务就写好,只是他尚未任何灵魂(业务逻辑)app

三:怎么编写咱们的业务逻辑?(在哪里注入咱们的灵魂)

3.1打开Service1类,按F7进入代码界面,以下图所示:


当前类有3个方法:运维

  • Service1:构造函数
  • OnStart:启动服务时会触发的方法(能够传递参数)
  • OnStop:结束服务时会触发的方法

3.2咱们在OnStart和OnStop进行日志打印,代码以下:

public Service1()
        {
            InitializeComponent();
            eventLog1 = new System.Diagnostics.EventLog();
            if (!System.Diagnostics.EventLog.SourceExists("MySource"))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
            }
            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";
        }

        protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("In OnStart.");
            LogHelper.loginfo.Info("In OnStart.");
        }

        protected override void OnStop()
        {
            eventLog1.WriteEntry("In OnStop.");
            LogHelper.loginfo.Info("In OnStop.");
        }

这里,我使用两种日志进行打印咱们的日志信息ide

  • EventLog:这个是系统自带一个控件(也是微软教程中使用的日志记录)
  • log4net:这个是一个第三方库日志程序集

看看效果:

Eventlog:(日志数量有限制,超过必定的数量就不会在显示了)

log4net:(自定义,想怎么存,怎么存【推荐】)
函数

四:编写好的服务,如何安装?(安装发动机)

4.1首先编译程序(快捷键:CtrL+Shift+B),生成项目

4.2找到目标文件

  • 右键项目,选择在文件资源管理器中打开文件夹
  • 找到Debug文件夹下面后缀为****.exe程序
  • 赋值路径:绝对路径,类是于:[D:****.exe]
  • 看看路径【C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools】,找到工具:Developer Command Prompt for VS 2019容许启动

4.3 在打开的CMD【就是上面打开的Developer Command Prompt for VS 2019程序,不是咱们Win+R打开的】中,输入命令:

InstallUtil.exe C:\**\test\bin\Debug\test.exe


如上图标识已经安装成功!工具

五:安装好,如何启动?(点火启动)

输入命令:学习

net start 你定义的服务的名称【二:如何建立WindowService=>2.添加安装程序=>DisplayName】

如上图表示启动成功3d

六:不想用了,如何中止?(关火休息)

输入命令:

net stop 你定义的服务的名称【二:如何建立WindowService=>2.添加安装程序=>DisplayName】

如上图表示关闭成功

七:不想要了,如何卸载?(拆掉发动机)

输入命令:

InstallUtil.exe /u C:\**\test\bin\Debug\test.exe

如上图表示卸载成功

1.找到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools】,找到工具:Developer Command Prompt for VS 2019 启动

2.输入InstallUtil.exe D:\**\**.exe,回车安装服务

3.输入:net start SundyService (启动服务)

4.输入:net stop SundyService (中止服务)

5.输入InstallUtil.exe /u  D:\**\**.exe 卸载服务

八:参考文档

建立 Windows 服务应用

九:总结

我为何要作这个WindwoService,是公司须要作一个运维软件,须要编写一个Windows服务,我也是看着官方文档学习的,业务逻辑比较简单, 开发也挺快的。
本身对Window服务理解,咱们其实这种服务也是一个程序,只是它集成到Windows系统服务中,这样有一个好处,能够设置开机自动启动,并且还神不知鬼不觉,在客户电脑上安装,客户也不知道,咱们是作运维监控,不是干坏事。能够把一些须要执行的任务,作成服务,放在服务器或本身电脑服务上,就能够自动跑,设置开机自起。

十:不足的地方

  • 本文没有介绍 EventLog是怎么来:这个在工具箱中,能够找到,而后点击Service1,作进来就好了
  • 服务默认是启动和中止方法,还能够扩展,有暂停,恢复,这两个方法,须要咱们重写才能触发事件
  • 园友提供:Topshelf有兴趣试试
相关文章
相关标签/搜索