前言说明

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

一:什么是WindowServer?(我们做的是一个什么东西?)

        Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。(微软爸爸是这么解释,简单介绍)

        我的理解,它就是一个挂载在我们系统上的服务,我们系统上服务其实有很多,比如我们的Sql数据库的服务:MSSQLSERVER,这个是启动数据库的一个服务,开启这个服务我们才能连接本地的安装的SQL。那WindowServer应该也是一个这样的服务,可以理解是一个可以让我们自定义开发的服务。

二:如何创建WindowServer?(我们知道是什么东西,怎么做?)

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

2.添加安装程序





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

2.1看看这两个文件
serviceInstaller1:



用的多的属性:

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

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

到此,一个服务就写好,只是他还没有任何灵魂(业务逻辑)

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

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.");
}

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

  • 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中,输入命令:

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



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

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

输入命令:

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

如上图表示启动成功

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

输入命令:

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

如上图表示关闭成功

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

输入命令:

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

如上图表示卸载成功

八:参考文档

创建 Windows 服务应用

九:总结

我为什么要做这个WindwoServer,是公司需要做一个运维软件,需要编写一个Windows服务,我也是看着官方文档学习的,业务逻辑比较简单, 开发也挺快的。

自己对Window服务理解,我们其实这种服务也是一个程序,只是它集成到Windows系统服务中,这样有一个好处,可以设置开机自动启动,而且还神不知鬼不觉,在客户电脑上安装,客户也不知道,我们是做运维监控,不是干坏事。可以把一些需要执行的任务,做成服务,放在服务器或自己电脑服务上,就可以自动跑,设置开机自起。

十:不足的地方

  • 本文没有介绍 EventLog是怎么来:这个在工具箱中,可以找到,然后点击Service1,做进来就行了
  • 服务默认是启动和停止方法,还可以扩展,有暂停,恢复,这两个方法,需要我们重写才能触发事件

聊聊WindowServer那些事!的更多相关文章

  1. IBM云的商业动作之我见(1):IBM 收购 OpenStack 托管私有云公司 Blue Box [IBM Acquired Blue Box]

    2015-06-10 IBM 刚刚(2015/06/03)宣布收购 Blue Box 公司.本文就聊聊这点事. 1. Blue Box 是做什么的?它是一家中小型托管私有云提供商. 1.1 公司的简单 ...

  2. 使用.NET开发AutoCAD——设计师不做画图匠(一)

    (一)前言--如何避免加班那些事 我是谁?我是一名工程设计师,有点"不务正业",在工作之余长期从事软件开发工作,开发了公路铁路行业广泛应用的设计软件.说正题之前,聊聊加班那些事.话 ...

  3. 关于Python编程的一些问答

    关于Python编程的一些问答 导语 大约1个月前,oschina.net和华章图书一起合作做了一个活动:OSC第51期高手问答--聊聊python那些事,来推广我参与撰写的书<编写高质量代码: ...

  4. Android Jetpack之AppCompat(一)

    今天我们来聊一聊有关AppCompat,作为Android Jetpack系列文章的开篇.说到Android Jetpack,我们先看一下这张图: 从图中我们可以看到,整个Android Jetpac ...

  5. 漏洞应急响应之批量poc验证

    1.文章难易度 [★★★] 2.文章知识点: python,poc验证; 3.文章作者: 野驴 4.本文参与 i春秋学院原创文章奖励计划,未经许可禁止转载! 0x01前言 当互联网爆出高危漏洞,或者团 ...

  6. Nginx的负载均衡的几种方式

    Nginx的负载均衡的那点事 本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分 ...

  7. nginx的负载均衡的问题

    本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...

  8. Nginx网络负载均衡,负载均衡,网络负载,网络均衡

    本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...

  9. 聊聊iOS中网络编程长连接的那些事

    1.长连接在iOS开发中的应用 常见的短连接应用场景:一般的App的网络请求都是基于Http1.0进行的,使用的是NSURLConnection.NSURLSession或者是AFNetworking ...

随机推荐

  1. mysql数据的增删改-内含经典面试题

    #DML语言 /* 数据操作语言: 插入:insert 修改:update 删除:delete */ #一.插入语句 #方式一:经典的插入 /* 语法: insert into 表名(列名,...) ...

  2. Java批量入库Demo

    java中往数据库批量插入数据Demo java代码: //入库数据是需要批量入库的List int len =入库数据.size(); //每次循环10条 int incremnet = 10; / ...

  3. OSCP Learning Notes - Exploit(8)

    Tools: 3. hydra Hydra v8.9.1 (c) 2019 by van Hauser/THC - Please do not use in military or secret se ...

  4. K8s-Pod健康检查原理与实践

    Pod健康检查介绍 默认情况下,kubelet根据容器运行状态作为健康依据,不能监视容器中应用程序状态,例如程序假死.这将会导致无法提供服务,丢失流量.因此重新健康检查机制确保容器健康幸存.Pod通过 ...

  5. 跳过Google开机设置/验证/向导

    Google 的开机设置向导,亦或称作开机验证,对于刷机党来说最熟悉不过了.一般情况下,刷类原生或是原生系统,再刷 Gapps,开机就需要进行一些 Google 验证.这些验证,与国内的手机厂商所设置 ...

  6. 手动造轮子——为Ocelot集成Nacos注册中心

    前言     近期在看博客的时候或者在群里看聊天的时候,发现很多都提到了Ocelot网关的问题.我之前也研究过一点,网关本身是一种通用的解决方案,主要的工作就是拦截请求统一处理,比如认证.授权.熔断. ...

  7. shell脚本带参数启动项目

    用maven工程打包时,会将数据库连接一并打进去,如果需要经常修改数据库连接,则需要打开jar包然后修改配置,这样很麻烦耗时并且容易出错. 因此需要将数据库配置放入项目外,这样修改数据库时去固定的配置 ...

  8. 微信PC端多开的秘密

    微信电脑端也能多开 昨天,偶然从好朋友小林(微信公众号:小林Coding)处得知,他的电脑居然可以同时上两个微信号. 手机端多开微信我知道,像华为.小米等手机系统都对此做了支持,不过在运行Window ...

  9. 中科大数分教材:用阶乘倒数和计算e值的误差和e是无理数的证明,用到误差计算

    \(e=lim_{n \to \infty}e_{n}(1+\frac{1}{n})^n\\\) \(=\lim_{n \to \infty}(\frac{1}{0!}+\frac{1}{1!}+\f ...

  10. layui常用插件(一) 轮播图

    轮播图 <html lang="en"> <head> <meta charset="UTF-8"> <meta ht ...