Csuper Blog

网络是工具,不是玩具...............Good Luck To You!

用winsw让任何Windows程序都能运行为服务

winsw介绍

有时候我们需要在Windows下开机运行某些程序,这对于有图形界面的程序来说一般不是什么事,在选项中选中开机启动,然后它们就可以自动运行了。但是如果我们想运行一些命令行程序的话就没这么方便了。


原来我的做法是写一个bat脚本,然后将它的快捷方式复制到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp,这样就可以开机自启了。不过这种方式有一个非常大的缺点,就是开机之后会显示一个命令行窗口!而且这个窗口还不能关,一关程序就停了。


其实Windows自带了一个后台程序管理的功能,就是我们经常用到的服务。但是Windows的服务只有程序的开发者在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。对于一般的命令行程序来说,没办法利用服务。所以今天我们就来使用一下标题的这个winsw。它可以将Windows上的任何一个程序注册为服务,如果不需要,也可以方便的卸载服务。

=====================================================================

使用winsw

下载

首先要下载winsw。它是一个单个的可执行文件,我们到Github release这里就可以下载winsw了。https://github.com/kohsuke/winsw/releases    一般来说当然是下载最新的。https://github.com/winsw/winsw/releases

winsw可以运行在.NET2和.NET4两个版本上,当然如果使用Win10等比较新的系统,最好下载更新版本的.NET。


下载完之后最好把文件改成一个比较短小的名字,例如winsw.exe这样的,方便后面输入命令。


编写配置文件

我们需要编写一个和程序同名的XML文件作为winsw的配置文件。文件大体上长这样,这是官网的例子。


 

 <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>

看到XML的标签名, 也能猜到这些参数是干嘛的, 下面是一个配置文件例子

<service>

    <id>kcp</id>

    <name>kcp</name>

    <description>这个服务用来将ss使用kcp协议加速</description>

    <executable>client_windows_amd64</executable>

    <arguments>-c kcp-config.json</arguments>

    <logmode>reset</logmode>

</service>

=========================================================

<service>

<!-- 该服务的唯一标识 -->

    <id>frp</id>

    <!-- 该服务的名称 -->

    <name>Frp Service (powered by WinSW)</name>

    <!-- 该服务的描述 -->

    <description>frpc客户端 这个服务用 frpc 实现内网穿透</description>

    <!-- 要运行的程序路径 -->

    <executable>d:\frpc\frpc.exe</executable>

    <!-- 携带的参数 -->

    <arguments>-c 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> 

==========================================================

注册服务

编写好配置文件之后,记得把配置文件和可执行文件放在一起,这样winsw才能正确识别配置文件。然后我们打开一个管理员权限的命令提示符或Powershell窗口,然后输入下面的命令,如果返回值为0,说明已将程序注册为服务。


winsw install

 

然后打开Windows的服务,我们可以看到这下已经出现了注册的服务,我们可以像一般服务那样开启、关闭它。




如果不再需要这个服务,使用winsw uninstall即可卸载服务。当然还有诸如start、stop这样的命令启动和关闭服务。更重要的是,没有那个既不美观又烦人的命令提示符窗口。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
控制面板
您好,欢迎到访网站!
  [查看权限]
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接
    • RainbowSoft Studio Z-Blog
    • 订阅本站的 RSS 2.0 新闻聚合

    Powered By Z-BlogPHP 1.7.3

    Copyright Csuper All Rights Reserved.