一、概述
服务化
这不算是一个技术指标,只是在日常开发和运维部署过程中,软件系统常见的一个运行状态,在Windows
中,笔者之前的相关文章已经对常见的三方实现应用程序服务化的工具进行了指令、配置等相关说明,本篇文章,是对现有Windows
中,常见方式的总结和分类(个人看法)。
二、分类
2.1 三方服务化工具
sc
Windows
中自带进行服务化运行的管理工具,能够对符合Windows
服务化运行的应用程序,实现服务注册和服务运行管理,目前笔者没有找到,如何通过工具去判定当前目标程序是否能够在注册之后,能够符合规范要求正常运行。
相关文章
[太阳当空照-Windows服务化方式脚本封装sc指令]
https://blog.csdn.net/qq_28806349/article/details/118946654
[太阳当空照-Windows服务化方式sc.exe应用]
https://blog.csdn.net/qq_28806349/article/details/118771065
[原创 太阳当空照-Windows服务化方式sc.exe指令清单]
https://blog.csdn.net/qq_28806349/article/details/119363744
优点:
- 系统自带
- 指令简单
- 学习成本低
缺点:
- 目标服务化引用需要能够满足
Windows
服务化标准,并不是每一个应用程序都能支持该方式服务化 - 指令基础配置易错率高,需要对服务化运行有一定的了解
Instrsrv
和srvany
Instrsrv
和srvany
都属于微软提供的Microsoft Windows Resource Kit Tools
全家桶工具包中的一部分,虽然在高版本系统中不在升级支持,但是工具还是可以跨Windows
系统版本使用的,Instrsrv
主要用于为Srvany
添加一个应用服务配置到注册表中,人工添加需要服务化运行的任意Windows
程序,Srvany
服务运行过程中充当,服务化操作的翻译官
,将相关服务化的指令转换为启动配置到注册表中的应用程序执行管理的操作。
相关文章
[太阳当空照-Windows服务化方式instsrv
与srvany
]
https://blog.csdn.net/qq_28806349/article/details/119152581
优点:
- 几乎能支持所有能持续运行的应用程序或脚本在
Windows
中的服务化运行 - 轻量级
- 支持
GUI
程序服务化
缺点:
- 复杂度较高,快速部署需要脚本化处理
- 已停止维护,无后续版本
- 指令资料较少
Winsw
这是目前还在持续迭代的一个款适合Windows
对应用程序实现服务化的的应用软件,目前笔者使用的为2.x
版本,在之后可能会很快出到3.x
并且为.net5.0
应用,使用者目前能够通过捆绑模式
使用配置文件,进行应用程序的服务注册和服务管理,未来应该能够使用上全局模式
。
相关文章
[太阳当空照-Windows服务化方式Winsw基本配置]
https://blog.csdn.net/qq_28806349/article/details/119283250
[太阳当空照-Windows服务化方式Winsw应用]
https://blog.csdn.net/qq_28806349/article/details/119305991
优点:
- 版本持续迭代中(至今)
- 学习资料较多
- 对日志的控制粒度细
- 常用指令简单上手
- 支持
GUI
程序服务化
缺点:
- 配置文件中的相关配置需要一定的学习成本
- 对初学者友好度不高,有一定上手难度
- 目前(2.x)仅仅支持应用程序和配置一对一模式
- 任务管理器服务不可见
Nssm
一个c/c++
应用,用于实现Windows
应用的实现服务化配置的工具,不区分是否符合Windows
服务化规范,只要能够正常在Windows
中运行,就可以尝试进行使用Nssm
实现服务化配置,支持指令和可视化配置两种方式,可以自由切换。
相关文章
[太阳当空照-Windows服务化方式NSSM指令清单]
https://blog.csdn.net/qq_28806349/article/details/119408134
[太阳当空照-Windows服务化方式NSSM应用]
https://blog.csdn.net/qq_28806349/article/details/119429952
优点:
- 支持指令和可视化配置
- 基础操作简单
- 支持全局指令操作
- 任务管理器中服务可见
- 支持
GUI
程序服务化
缺点:
- 版本已在2017年停止迭代
- 细节指令具有一定复杂度
2.2 应用场景
对于以上三方软件的使用场景,对应已知能够进行Windows
服务化的应用程序以上几种方式都可以,服务化程序集不多,又默认不支持Windows
服务化,可以直接使用Winsw
或Nssm
,对于需要在任务管理器中的服务进行可视化配置时,就选择Nssm
,Winsw
注册的服务默认不在任务管理器的服务显示,需要去到服务列表和通过指令查询才可以看到,如果希望进行服务继承管理处理,可以选择Winsw
、Nssm
或者srvany
+SrvanyUI_1.0
:https://wangye.org/blog/archives/644/。
2.3 应用软件自带脚本
在日常使用中,很多应用软件,在下载时,就已经打包或者自带服务化启动脚本,便于使用者在本地进行对应的Windows
服务化,这样省去了一部分软件在使用中,依托控制台的带来退出即停止的问题,这类软件,常常是软件开发过程中的基础服务设施,例如:Redis
,MongoDB
等。
2.4 语言编码服务化
对于系统开发人员来说,对应开发语言也大多拥有内置的相关类库和模块能够支持,开发的应用程序,直接服务化,而不依托于三方工具,例如:Csharp/C#
使用Topshelf
、HostService
,C
使用windows.h
,Go
使用github.com/kardianos/service
等等。
三、总结
通过对以上一个工具的使用和对服务化的进一步了解,得出以下结论:
1、符合Windows
服务化规范的应用直接支持在注册表中注册的服务配置后,在Windows10
系统中的注册表编辑器
中,目录HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
下对应的就是相关服务的配置内容。
2、三方程序实现服务化目标程序,主要是由于三方程序自身符合Windows
服务化规范(调用相关系统函数),能够将用户操作状态转换为控制应用程序运行状态转换的能力,三方服务作为父进程,以子进程的方式启动对应的目标应用程序,笔者将之称为套壳
,同时注册时一定得用管理员权限,总是安装失败时,可以考虑暂时关闭本地主机的安全管理软件,为了服务配置注册到注册表
。
四、参考链接
【1】https://docs.microsoft.com/zh-cn/windows/win32/services/about-services
【2】https://wangye.org/blog/archives/644/