前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows 服务 同时启动多个服务

Windows 服务 同时启动多个服务

作者头像
独立观察员
发布2022-12-06 19:16:49
1.5K0
发布2022-12-06 19:16:49
举报

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%\Microsoft.NET\Framework\v4.0.30319\installutil.exe 路径下,可以直接带路径使用,也可以拷到项目中使用。

下面给出批出理代码:

  1. 安装和启动服务
代码语言:javascript
复制
CD /D "%~dp0"
InstallUtil WindowsServiceTest.exe
net start Service1
net start Service2
pause

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

2、单独启动服务

代码语言:javascript
复制
net start Service1
net start Service2
pause

3、停止服务

代码语言:javascript
复制
net stop Service1
net stop Service2
pause

4、卸载服务

代码语言:javascript
复制
CD /D "%~dp0"
installutil /u WindowsServiceTest.exe
pause

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

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

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

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

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

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

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

再运行 卸载服务.bat :

程序功能也都生效了:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 独立观察员博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档