将frp注册为windows的服务开机自动启动

# 商业转载请联系作者获得授权,非商业转载请注明出处。
# 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”。

点赞