背景
想象一下,你是一个魔法师,在Windows世界内,你的的魔法就是让程序在后台无声无息地运行。如何完成这个神奇的任务呢?一般人可能只会想到将程序作为服务运行。正如我们这些编程高手常做的,将程序写成一个通行无阻的exe文件,从而方便地穿越多个平台的魔法境界。但请注意,Windows服务这个秘籍仅限于Windows世界的运用。
有时候,我们会使用nodejs、golang或.net core等不同的魔法学派进行创造。如果我们希望在Windows世界里施展这些法术,那就需要借助一种神奇工具将其转化为Windows服务。在众多神器中,WinSW无疑是最受欢迎的。所以,魔法师们,现在你知道如何在Windows世界自由驰骋了吧!快去尝试这个神奇的技巧吧!
WinSW
WinSW,即Windows Service Wrapper。所以运行需要”.NET framework“,现在Win10上都自带.NET framework4.0
原理其实是winsw.exe本身可以注册为windows服务,可以设置为自启动。
当他启动后,然后根据和此exe同名的xml文件中的配置,执行设置的命令,达到自启动的效果。
winsw的开源地址:https://github.com/winsw/winsw
配置过程
WinSW通过加载XML文件获取配置,可将WinSW.exe改为服务的名称,如Service.XXApp.exe,对应的XML文件名为Service.XXApp.xml
1.XML文件配置
<configuration>
<!-- ID of the service. It should be unique accross the Windows system-->
<id>Service.XXApp</id>
<!-- Display name of the service -->
<name>MService.XXApp Service (powered by WinSW)</name>
<!-- Service description -->
<description>This service is a service cratead from a minimal configuration</description>
<!-- Path to the executable, which should be started -->
<executable>nodejs\node.exe</executable>
<arguments>server.js</arguments>
<startmode>Automatic</startmode>
<logpath>D:/logs/service</logpath>
<!-- 控制日志-->
<log mode="roll-by-size">
<!-- 一个日志文件大小60k,单位是k-->
<sizeThreshold>60</sizeThreshold>
<!-- 一共有8个日志文件,-->
<keepFiles>8</keepFiles>
</log>
</configuration>
属性名 | 说明 |
---|---|
id | 安装windows服务后的服务ID,必须是唯一的。 |
name | 服务名称,也必须是唯一的。一般和id一致即可 |
description | 服务说明,可以使用中文,可做备注使用 |
executable | 执行的命令,比如启动springboot应用的命令java |
arguments | 命令执行参数,比如 包路径,类路径等 |
startmode | 启动模式,自动:Automatic |
logpath | 日志文件路径 |
log | 日志控制,参考https://github.com/winsw/winsw/blob/master/doc/loggingAndErrorReporting.md |
2.安装配置需要
set srvName=Service.XXApp.exe
sc create Service.XXApp binpath= %~dp0%srvName% type= own start= auto displayname= Service.XXApp
net start Service.XXApp
pause
或用以下命令安装
Service.XXApp.exe install
可参考: https://github.com/winsw/winsw/blob/master/doc/installation.md
还支持以下命令:
;删除服务
Service.XXApp.exe uninstall
;启动服务
Service.XXApp.exe start
;停止服务
Service.XXApp.exe stop
;重启服务
Service.XXApp.exe restart
;查看状态
Service.XXApp.exe status