前言

Windows 下手动添加开机启动的方式一般是创建快捷方式到启动文件夹,但某些程序是命令行式运行的,打开后会显示一个 cmd 窗口,而且窗口关闭程序就会停止。而 winsw 可以将 Windows 上的任一程序注册为服务,实现命令行程序开机启动和后台运行。

下载 winsw

下载 winsw ,下载完之后最好把文件改成一个比较短小的名字,例如 winsw.exe,方便后面输入命令。winsw 有 .NET2 和 .NET4 两个版本,Windows 10 建议下载 .NET4 版本。

编写配置文件

官方提供了一个简单配置文件示例:

    <service>
      <id>jenkins</id>
      <name>Jenkins</name>
      <description>This service runs Jenkins continuous integration system.</description>
      <env name="JENKINS_HOME" value="%BASE%"/>
      <executable>java</executable>
      <arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>
      <logmode>rotate</logmode>
    </service>

配置项说明:

id 服务的ID。必须在所有服务中是唯一的,由字母数字字符组成。

name 服务的显示名称。可以和id一样,也需要在所有服务中是唯一的,可以包含空格和其他字符。

description 描述。随便写,自己明白就行,或者不写也行。

env 环境变量。一般用不上,直接删除。如果有需求照着格式写就行。

executable 可以是程序文件名,也可以是绝对路径。推荐放和程序在一起,直接写文件名就行。

arguments 程序的启动参数,有就写,没有就删除。

logmode 日志模式。如果你不想日志变得无限大建议改成 reset

配置文件是 .xml 格式的,我们需要做的是创建一个空白文档,重命名为与 winsw 程序本体一致就行,如果 winsw 程序本体是winsw.exe,那么配置文件命名为 winsw.xml,放在一起,然后打开文件把上面的内容复制进去,以便我们修改。

下面是我写的一个配置文件:

    <service>
      <id>UnblockNeteaseMusic</id>
      <name>UnblockNeteaseMusic</name>
      <description>UnblockNeteaseMusic 开机自启服务</description>
      <executable>UnblockNeteaseMusic.bat</executable>
      <log mode="reset"></log>
    </service>

注册服务

写完配置文件,确定程序和 winsw.exewinsw.xml 在同一路径下,在这个路径以管理员权限打开 cmd 或者 Powershell ,输入 winsw.exe install ,如果不出意外,只会输出一条信息:

INFO  - Installing the service with id 'UnblockNeteaseMusic'

UnblockNeteaseMusic 这里的字符应该是你自己写的程序的 id ,这里仅用于演示。

启动服务

最后输入 winsw.exe start 启动服务,这样程序就在后台无窗口运行了,重启开机也会无窗口自动启动。停止运行则输入 winsw.exe stop。你也可以在 Windows 的任务管理器或者服务中管理这个程序的服务。

卸载服务

如果不再需要这个服务,使用 winsw.exe uninstall 即可卸载服务。