Windows 服务 同时启动多个服务

 Windows 服务 同时启动多个服务

 独立观察员 2019.02.26

最近需要开发 Windows Service 程序,之前没有接触过,所以把了解到的一些东西记录下来。

Windows 服务程序可以简单理解为需要长时间在后台运行, 而又不需要界面显示的程序,在计算机管理 --> 服务和应用程序 --> 服务中可以看到:

4bbb7b6ec421c74aac26289f24601a73.png

我们先来新建一个 "Windows 服务" 项目,具体可参考《C# 编写 Windows Service(windows 服务程序)》(https://www.cnblogs.com/bluestorm/p/3510398.html)一文。

逻辑写在继承于 ServiceBase 类的类中,该类型的类通过添加 "Windows 服务" 来生成:

d9d51e4722e5e5a0d02c22dc23b5cfa5.png

双击生成的类文件,打开的是一个设计页面,可点击切换到代码视图:

0dae847f19b3daace2bd0fc7a6692ef8.png

代码视图中可以看到,是继承于 ServiceBase 类的,主要逻辑写在 OnStart 和 OnStop 方法中:

27275dffb50a0120e1deb17c376634e0.png

在 Service1 的设计页面右键 -->"添加安装程序",生成 ProjectInstaller.cs ,也是个设计页面,包含一个 serviceProcessInstaller1 组件和一个 serviceInstaller1 组件:

6f5e15ac593f6ac9f22983c6c754bb1d.png

其中 serviceProcessInstaller1 属性中一般将 Account 的值改为 LocalSystem :

2cb467b55b4f872d033feb9c06235c30.png

而 serviceInstaller1 的属性中,Description 是描述信息,DisplayName 是显示的名称,都在开头提到的系统服务管理页面中显示。ServiceName 指定了程序中使用该服务要用的名称。StartType 一般选为 Automatic,代表了自动启动:

27a64b8af73a44979c5f6114524adbae.png

然后就是安装和启动了,有好几种方法,本文采用 InstallUtil.exe 和 批处理 结合的方式。InstallUtil.exe 命令行工具在 % SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe 路径下,可以直接带路径使用,也可以拷到项目中使用。

下面给出批出理代码:

  1. 安装和启动服务

CD /D "%~dp0"
InstallUtil WindowsServiceTest.exe
net start Service1
net start Service2
pause

其中第一行是 cd 到当前目录。第二行是安装服务,WindowsServiceTest.exe 是服务所在的程序名。第三行是启动其中的 Service1 服务。

2、单独启动服务

net start Service1
net start Service2
pause

3、停止服务

net stop Service1
net stop Service2
pause

4、卸载服务

CD /D "%~dp0"
installutil /u WindowsServiceTest.exe
pause

大家可能发现了,除了 Service1,里面还有个 Service2,这就是接下来要讲的安装两个以上服务的方法。(只使用一个服务的话,要把 Service2 删除)

首先按照之前的方法添加 Service2,然后照样添加安装程序,会出现在之前的地方(新增了一个 serviceInstaller2):

07548c209a6fe92ab24a4befb535889b.png

接下来打开 Projectlnstaller.Designer.cs 文件,这个是 VS 自动生成的,本来是不需要我们修改的,但这里似乎有一个 bug (参考:《[c# windows 服务 一个进程 多个服务的使用](https://blog.csdn.net/dkdhn/article/details/50126819)》):

d6d25e42baa95ec386d3b656f34c0495.png

就是上图中的红框框住的一句(AddRange 方法中的 this.serviceInstaller2)并没有自动添加上,所以我们手动加上。

然后在程序入口函数 Program.Main () 中添加 Service2 的调用:

1b7dfe81920dc60fd89771ccfba1468d.png

这样之后就可以生成程序了,然后以管理员身份运行批处理文件(安装和启动服务.bat):

c76a78d103c91fb4bfdb656b19fd43c6.png

然后在服务管理页面就可以看到了:

d69e575e06c9b763ab4b880ec5edd2f5.png

再运行 卸载服务.bat :

b4caa31341572d032b69349ebd4eddb9.png

程序功能也都生效了:

2a6023f1ac038857918ef89a9b12e093.png

好了,就说这些了,最后提供下示例代码地址:https://gitee.com/dlgcy/WindowsServiceTest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一、基本remix环境及HelloWord contract《2022 solidity8.+ 版本教程到实战》

这个系列是 solidity8.版本的教程,既然学习了 solidity 就应该明白智能合约是啥,在此系列文章中将不赘述基础概念,只讲解对应的语法,希望读者理解。 环境 solidity 版本:8.(2022年9月8日 最新版本) IDE:h…

遥感空间尺度转换技术(升尺度和降尺度)

遥感图像的一个基本特征是空间分辨率。目前已经可以有效获取大量不同空间分辨率遥感数据。 尺度和尺度转换已经成为遥感的核心问题之一,人们已经从不同角度提出了这一问题。尺度转换分为两种: 升尺度:从高分辨率到低分辨率的转换;降尺度:从低分辨率到高分辨率的转换。文章…

three.js插件实现立体动感视频播放效果

2019独角兽企业重金招聘Python工程师标准>>> three.js插件实现立体动感视频播放效果 效果描述: 立体式视频播放效果 大家使用的时候可得注意了,它并不支持低版本浏览器 使用方法: 1、将body中的代码部分拷贝到你需要的地方,将视频…

Python3.6学习笔记(五)

网络编程 网络程序出现的比互联网要早很多,实现方式主要依靠网络上不同主机间进程的通信,通信协议最重要的是TCP/IP协议。在这两个协议基础上还有很多更高级的协议,包括HTTP、SMTP等。要进行两个主机间的网络通信,必须四个元素&a…

ArcGIS实验教程——实验三十三:ArcScan自动矢量化完整案例教程

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 1 ArcScan 简介2. ArcScan使用前提及注意事项3. ArcGIS自动矢量化案例1 ArcScan 简介 ArcScan是ArcGIS Desktop的打展模块,是栅格数据矢量化的套工具集, 用这些工具,可以创建要素,将…

抢先体验全新标签页!Windows 11 必备小工具下载

面向 Dev 频道的 Windows 预览体验成员,微软近日推送了 Windows 11 新预览版,为文件资源管理器带来了全新标签页功能。Windows 11 文件资源管理器全新标签页介绍在 Windows 11 预览版中,新功能分别向 A 和 B 两组用户的电脑推送测试。A 用户的…

二、基本类型及函数使用《2022 solidity8.+ 版本教程到实战》

一、基本变量类型 solidity 中的基本变量类型与一般编程中类似: // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; contract Hello{string public say"Hello 1_bit";int public ival-1;uint public uval1;address public aval0xd9145CCE52…

Markdown编辑器模板

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

as3文本框的动态拖拽和编辑

如今非常多软件都支持了编辑界面的文本拖拽和点击编辑来直接改动数值, 这样便于操作, 并且体验性也好, 抛砖引玉吧 于是就用好久没编写的as3来写了一下: 由于用的flash ide写的没有提示, 就临时不做细节处理了, 假设用于project上会有点小问题, 只是不影响本效果展示 代码: imp…

为 HttpClient 注册自定义请求标头

前言上次,我们介绍了《在 ASP.NET Core 中使用 HTTP 标头传播》。但是有时候,当服务间需要互相调用时,也需要将创建一些自定义标头传播到目标服务。比如, ServiceA 已经进行了身份验证,那么当它调用 ServiceB 时&#…

【Pix4d精品教程】未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 block,问题分析及解决方案汇总

文章目录 问题描述原因分析问题分析问题解决问题描述 在使用pix4d处理航测数据时,部分航带高精度检测时,提示未校准相机: 287 out of 402 images calibrated (71%), all images enabled, 6 blocks 质量报告如下所示: 切换到【控三射线】,查看空山射线,红色部分是校准失败…

四、函数修改器《2022 solidity8.+ 版本教程到实战》

一、函数修改器 modifier 在 solidity 中有一个函数修改器可作为前置、中置或者后置方法,有点像 ASP.NET 中的母版页(最起码差不多十年不碰了,不懂还有没有这个概念),又有点像 ThinkPHP 中的前置方法,可以…

mysql按月进行表分区

数据库 mysql 单表数据量达到千万、亿级,可以通过分表与表分区提升服务性能。 现有表accounting,4亿条数据,数据访问方式为insert与select,select为按月访问,为减少数据与程序变更,采用表分区的方式。 数据…

MFC 直线 虚线 折线 圆 椭圆 矩形 弧形

****Dlg.h头文件加入: //为project加入画笔、点变量数组 public:CPen m_pen[5];CPoint m_point[5]; public:void DrawLine(CDC *pDC);void DrawPolyline(CDC *pDC);void DrawPolygon(CDC *pDC);void DrawRect(CDC *pDC);void DrawRoundRect(CDC *pDC);void DrawElli…

最近无埋点技术很是流行,抽空研究了下诸葛IO,talkingData以及百分点这些业内知名公司的无埋点SDK,抽取其中重要的信息供大家参考:

1、首先什么是无埋点呢,其实所谓无埋点就是开发者无需再对追踪点进行埋码,而是脱离代码,只需面对应用界面圈圈点点即可追加随时生效的事件数据点。 无埋点的好处 其实无埋点并不是完全不用写代码,而是尽可能的少写代码。开发者将S…

【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程

pix4d mapper相机未校准后手动添加连接点完美案例图文教程 整体预览 局部放大 如图所示,红色的照片为未校准的图片,软件无法自动获取连接点,有关相机未校准的原因及解决办法,可以参考《pix4d未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 bl…

Blazor University (30)表单 —— 从 InputBase 派生

原文链接&#xff1a;https://blazor-university.com/forms/descending-from-inputbase/从 InputBase 派生源代码[1]InputBase<T> 组件是各种 Blazor 输入控件所继承的抽象类。这个类在标准 HTML <input> 元素的基础上增加了额外的功能&#xff0c;比如验证——我们…

3.菜鸟教你一步一步开发 web service 之 axis 服务端创建

转自&#xff1a;https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步&#xff0c;新建一个工程&#xff0c;如图&#xff1a; 选 Java 写一个工程名&#xff0c;选择好工程路径&#xff0c;点下一步 选择 webServices &#xff0c;在右边的 version 中选择 …

ArcGIS实验教程——实验三十四:ArcGIS地统计分析全解(直方图、正态QQ图、趋势分析、voronoi图、半变异函数、协方差云)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、地统计分析的基本原理二、地统计分析的工作流程三、探索性空间数据分析工具1. 直方图2. QQ分布图3. 趋势分析4. Voronoi图5. 半变异函数与协方差云6. 交叉协方差云四、空间插值一、地…

用python计算圆周率

一、算法 马青公式&#xff1a;马青公式由英国天文学教授约翰马青(John Machin &#xff0c;1686 –1751)于1706年发现。马青公式每计算一项可以得到1.4位的十进制精度。因为它的计算过程中被乘数和被除数都不大于长整数&#xff0c;所以可以很容易地在计算机上编程实现。 二、…