Windows 服务 同时启动多个服务
Windows服务同时启动多个服务
独立观察员2019.02.26
最近需要开发Windows Service程序,之前没有接触过,所以把了解到的一些东西记录下来。
Windows 服务程序可以简单理解为需要长时间在后台运行, 而又不需要界面显示的程序,在计算机管理 --> 服务和应用程序 --> 服务中可以看到:
我们先来新建一个 "Windows 服务" 项目,具体可参考《C# 编写 Windows Service(windows 服务程序)》( https://www. cnblogs.com/bluestorm/p /3510398.html )一文。
逻辑写在继承于 ServiceBase 类的类中,该类型的类通过添加 "Windows 服务" 来生成:
双击生成的类文件,打开的是一个设计页面,可点击切换到代码视图:
代码视图中可以看到,是继承于 ServiceBase 类的,主要逻辑写在 OnStart 和 OnStop 方法中:
在 Service1 的设计页面右键 -->"添加安装程序",生成 ProjectInstaller.cs ,也是个设计页面,包含一个 serviceProcessInstaller1 组件和一个 serviceInstaller1 组件:
其中 serviceProcessInstaller1 属性中一般将 Account 的值改为 LocalSystem :
而 serviceInstaller1 的属性中,Description 是描述信息,DisplayName 是显示的名称,都在开头提到的系统服务管理页面中显示。ServiceName 指定了程序中使用该服务要用的名称。StartType 一般选为 Automatic,代表了自动启动:
然后就是安装和启动了,有好几种方法,本文采用InstallUtil.exe 和批处理结合的方式。InstallUtil.exe 命令行工具在 % SystemRoot%\ http:// Microsoft.NET \Framework\v4.0.30319\installutil.exe 路径下,可以直接带路径使用,也可以拷到项目中使用。
下面给出批出理代码:
-
安装和启动服务
CD /D "%~dp0"InstallUtil WindowsServiceTest.exenet start Service1net start Service2pause
其中第一行是 cd 到当前目录。第二行是安装服务,WindowsServiceTest.exe 是服务所在的程序名。第三行是启动其中的 Service1 服务。
2、单独启动服务
net start Service1net start Service2pause
3、停止服务
net stop Service1net stop Service2pause
4、卸载服务
CD /D "%~dp0"installutil /u WindowsServiceTest.exepause
大家可能发现了,除了 Service1,里面还有个 Service2,这就是接下来要讲的安装两个以上服务的方法。(只使用一个服务的话,要把 Service2 删除)
首先按照之前的方法添加 Service2,然后照样添加安装程序,会出现在之前的地方(新增了一个 serviceInstaller2):
接下来打开Projectlnstaller.Designer.cs文件,这个是VS自动生成的,本来是不需要我们修改的,但这里似乎有一个bug(参考:《[ c# windows服务一个进程 多个服务的使用]( https:// blog.csdn.net/dkdhn/art icle/details/50126819 )》 ):
就是上图中的红框框住的一句(AddRange 方法中的 this.serviceInstaller2)并没有自动添加上,所以我们手动加上。
然后在程序入口函数 Program.Main () 中添加 Service2 的调用:
这样之后就可以生成程序了,然后以管理员身份运行批处理文件(安装和启动服务.bat):
然后在服务管理页面就可以看到了:
再运行 卸载服务.bat :
程序功能也都生效了:
好了,就说这些了,最后提供下示例代码地址: https:// gitee.com/dlgcy/Windows ServiceTest
技术群:添加小编微信并备注进群
小编微信:mm1552923
公众号:dotNet编程大全
.NET
PostSharp 中 AOP 功能的简单使用
.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号
将.NETFramework项目转换为 .NETStandard项目
http:// ASP.NET Core MVC 网站学习笔记
Unity 容器简单使用方法
Unity容器依赖注入之属性注入使用备忘
添加服务引用来使用WebService
Windows
Windows 11 及其安卓子系统折腾记
IIS 错误解决:当前标识没有对 Temporary http:// ASP.NET Files 的写访问权限
台式机插4G上网卡后供给其它设备内外网
搭建 Frp 来远程内网 Windows 和 Linux 机子
Windows 端最稳定的DLNA音乐播放器推荐
Windows可登陆的本地账户忘记密码的解决方法
使用ngrok从外网连接内网的远程桌面
其它
在香蕉派的树莓派系统上配置 Syncthing 自启动(暨 Linux 软件自启服务配置)
使用GB28181.Solution+ZLMediaKit+MediaServerUI进行摄像头推流和播放
如何快速剥火腿肠皮?
使用 Floccus 插件和坚果云同步Chrome类浏览器书签
Docker Hub使用初探
『独立观察员』个人观影 Ⅱ
VisualStudio使用DialogPage存储配置信息
分页SQL语句