前言说明

  • 使用工具: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. idea 安装 codota 插件

    为抄代码而生的插件哇,码农们的知心姐姐!!!

  2. 洛谷 P5350 序列 珂朵莉树

    题目描述 分析 操作一.二.三为珂朵莉树的基本操作,操作四.五.六稍作转化即可 不会珂朵莉树请移步至这里 求和操作 把每一段区间分别取出,暴力相加 ll qh(ll l,ll r){ it2=Spli ...

  3. win7下建立docker共享文件夹

    前言 建立本机(win7)和VirtualBox中docker虚拟机的共享文件夹,注:下面的命令都是以root身份运行的,使用sudo -i切换到root身份,如无法切换,请自行在命令前加上sudo命 ...

  4. VMware虚拟机网络配置详解

    VMware网络配置:三种网络模式简介 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这些后面会 ...

  5. 【week1错题集】

    day9[2.f] # day9 题2.f ''' 有如下文件,t1.txt,里面的内容为: 葫芦娃,葫芦娃, 一根藤上七个瓜 风吹雨打,都不怕, 啦啦啦啦. 以r模式打开文件,从‘风吹雨打..... ...

  6. Maven配置文件中的版本使用-SNAPSHOT

    SNAPSHOT是什么? SNAPSHOT是快照,是一种特殊的版本,制定了某个当前的开发进度副本.不同于正式版本,Maven每次构建都会在远程仓库中检查新的快照.如此每次发布更新代码的快照到仓库中,新 ...

  7. 目前解决移动端1px边框最好的方法

    在移动端开发时,经常会遇到在视网膜屏幕中元素边框变粗的问题.本文将带你探讨边框变粗问题的产生原因及介绍目前市面上最好的解决方法. 1px 边框问题的由来 苹果 iPhone4 首次提出了 Retina ...

  8. JDBC 连接 MySQL 8.0.15+ 常见错误记录

    课后复习 1. No suitable driver found for mysql:jdbc://localhost:3306/test 错误原因: mysql:jdbc://localhost:3 ...

  9. 第【7】章: 数递归、DFS、剪枝、回溯等问题 学习报告

    (7.2)节:   递归问题    1.题干: 递归方便表达,但是性能上消耗过多 1.有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶.3阶. 请实现一个方法,计算小孩有多少种上楼的方式. ...

  10. 羞羞的Python模块包

    目录 一.pip 二.pip常用命令 三.No module 'xxxxx' 四.写在最后   前言 写Python代码的时候,经常会遇到包的问题,但是都是遇到一次,搜索一次,解决了.下一次还是同样的 ...