# 商业转载请联系作者获得授权,非商业转载请注明出处。
# For commercial use, please contact the author for authorization. For non-commercial use, please indicate the source.
# 协议(License):署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
# 作者(Author):limvs
# 链接(URL):https://www.limvs.cn/archives/2459
# 来源(Source):limvs
一、WinSW官方介绍
现实生活中,我们使用windows系统的电脑的时候,可能会遇到这么一种情况:想把一些应用程序添加为开机启动项。
对于有图形界面的应用程序,一般不存在问题。但是如果想运行命令行应用程序,就不是那么方便了。Windows系统自带后台程序管理的功能,也就是我们经常用到的服务。
但是Windows的服务只有程序的开发者在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。对于一般的命令行程序来说,没办法利用服务。
WinSW,可以将Windows上的任何一个程序注册为服务的工具。同样也可以进行卸载该服务。
二、WinSW使用
1、工具下载
这个工具可以在GitHub上进行下载。https://github.com/kohsuke/winsw/releases
当然,在GitHub上也可以获取到工具的源码
https://github.com/kohsuke/winsw
下载完之后最好把文件改成一个比较短小的名字,例如:这里将下载WinSw.Net4.exe重命名为winsw.exe, 方便后面输入命令时使用。
2、修改配置文件
我们需要编写一个和程序同名的XML文件作为WinSW的配置文件WinSW.xml。大体的格式如下:
<service> <!-- 该服务的唯一标识 --> <id>frpc20210817</id> <!-- 该服务的名称 --> <name>内网穿透_frp_0.37.1</name> <!-- 该服务的描述 --> <description>frpc客户端-用于 frpc 实现内网穿透</description> <!-- 要运行的程序路径 --> <executable>C:\server\frp_0.37.1_windows_amd64\frpc.exe</executable> <!-- 携带的参数 --> <arguments>-c C:\server\frp_0.37.1_windows_amd64\frpc.ini</arguments> <!-- 第一次启动失败 60秒重启 --> <onfailure action="restart" delay="60 sec"/> <!-- 第二次启动失败 120秒后重启 --> <onfailure action="restart" delay="120 sec"/> <!-- 日志模式 --> <logmode>append</logmode> <!-- 指定日志文件目录(相对于executable配置的路径) --> <logpath>logs</logpath> </service>
改为你实际的路径
# 商业转载请联系作者获得授权,非商业转载请注明出处。
# For commercial use, please contact the author for authorization. For non-commercial use, please indicate the source.
# 协议(License):署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
# 作者(Author):limvs
# 链接(URL):https://www.limvs.cn/archives/2459
# 来源(Source):limvs
这里只是简单介绍使用WinSW的流程,配置项实际也不止那么几个,在第三部分有关于配置文件的详细解释。
3、注册服务
WinSW.exe的配置文件名称应该是WinSW.xml。
此时,WinSW.exe、WinSW.xml以及你的应用程序应该都是在同一目录中。
然后用管理员权限打开一个命令提示符窗口,cd进入到应用程序所在目录,可以通过输入下面的命令来进行控制应用程序对应的服务:
winsw.exe install 安装服务 winsw.exe uninstall 卸载服务 winsw.exe start 开启服务 winsw.exe stop 停止服务 winsw.exe restart 重新启动服务 winsw.exe status 检查服务的当前状态
安装服务命令执行后,如果返回值为0,就表示服务已经安装成功。此时在windows服务的窗口,就能看到你刚才安装的服务了。
三、WinSW配置说明(翻译xmlConfigFile.md)
1、配置文件的文件结构
配置文件是一个XML格式文件,其根元素必须是“service”节点。
2、配置文件中的环境变量表达式
XML配置文件中,可以包含形如“%Name%”的环境变量表达式。如果发现这种情况,将会自动被变量的实际值替换掉。如果引用未定义的环境变量,则不会进行替换。
此外,服务包装器本身定义了一个名为“BASE”的环境变量,它指向一个包含重命名为“winsw.exe”的文件的目录。这在引用同一目录中的其他文件的时候是很有用的。由于这本身就是一个环境变量,所以这个值也可以从服务包装器启动的子进程中访问。
3、配置项说明
(1)id:Windows系统内部使用的识别服务的ID。必须唯一,完全由字母数字字符组成。
(2)name:服务的简短名称,在系统的所有服务名称中,也要唯一。
(3)description:该服务可读描述。显示在Windows服务管理器中。
(4)executable:该元素指定要启动的可执行文件。它可以是绝对路径
(5)startmode:指定Windows服务的启动模式。它可以是下列值之一:开机、系统、自动或手动。默认值是“Automatic”。