使用WinSW将程序安装成Windows服务
本文最后更新于 340 天前,其中的信息可能已经过时,如有 错误/失效 请发送邮件到qimeng9420@foxmail.com或留言。

前言

虽然目前大多数成熟的Windows应用已经集成了开机启动功能,但是还有很多应用或者脚本没办法简单的做到稳定的开机自启动(首先要把任务放到开机自启动,还要保证不被某些杀毒软件吞掉或者起冲突被禁用了),如何简单实现该功能呢,那就是把它包装成系统服务,做到想停就停,想启动就启动,想延迟启动就延迟启动。今天就带来一个把可以将任何可执行文件(.exe,.bat等)包装成Windows服务的软件——WinSW。

WinSW的Github项目地址

WinSW是一个通用的Windows服务包装器,WinSW不需要安装,仅需将WinSW.exe和配置文件复制到指定目录即可。WinSW通过一个XML配置文件来定义服务的行为,可以轻松地安装,卸载,启动和停止自定义Windows服务。

WinSW的特点

  • 轻量级:WinSW非常轻便,处理Windows服务所需的文件非常少,而且不需要安装任何东西,只需要将WinSW.exe和配置文件复制到指定目录即可。

  • 易配置:WinSW使用XML作为配置文件格式,配置文件非常易于阅读和编辑。WinSW支持命令行参数来替代配置文件中的某些选项,从而使服务的配置更加简单。

  • 灵活性:WinSW可以轻易地将几个脚本或可执行文件捆绑到一个Windows服务中。WinSW通过提供许多不同的配置选项来适应各种服务需求。

  • 可扩展性:WinSW提供了丰富的扩展点来处理Windows服务的各种方面,例如日志记录和事件通知。

下载WinSW

WinSW01

写这篇文章时,最新版稳定版本为WinSW v2.12.0

使用

之前提到frp客户端运行需要打开cmd运行:./frpc.exe -c frpc.toml来运行frpc,这里就以frpc作为演示将其包装为系统服务。想查看配置frp内网穿透教程可以跳转Docker配置Frp内网穿透教程

将WinSW.exe放置在需要包装的软件目录下

下载对应版本exe包之后,直接放到 frpc 的目录下,并修改名字为frpc-WinSW.exe(不修改名字也是可以的,我这里为了方便查找和管理修改这个名字)。

新建WinSW配置文件

新建文件: frpc-WinSW.xml 添加如下内容

<service>

  <!-- 服务ID名称(唯一) -->

  <id>frpc</id>

  <!-- 服务显示名称 -->

  <name>frpc</name>

  <!-- 服务的描述信息 -->

  <description>FRP-内网穿透客户端,帮助实现将此计算机映射到 ***.***.***.*** 上,提供公网访问</description>

  <!-- 可设置环境变量 -->

  <env name="HOME" value="%BASE%"/>

  <!-- 要执行的可执行文件 -->

  <executable>%BASE%\frpc.exe</executable>

  <!-- 可执行文件传递的参数 -->

  <arguments>-c .\frpc.toml</arguments>

  <!-- 开机自启 -->

  <startmode>Automatic</startmode>

  <!-- 延时自启 -->

  <delayedAutoStart/>

  <!-- <logmode>rotate</logmode> -->

  <logpath>%BASE%\logs</logpath>

  <log mode="roll-by-size-time">

  <sizeThreshold>10240</sizeThreshold>

  <pattern>yyyyMMdd</pattern>

  <autoRollAtTime>00:00:00</autoRollAtTime>

  <zipOlderThanNumDays>5</zipOlderThanNumDays>

  <zipDateFormat>yyyyMMdd</zipDateFormat>

  </log>

</service>

保存最终目录效果如下:

WinSW02

运行

在该目录下打开cmd,以管理员身份执行

frpc-WinSW.exe install

WinSW03

看到如下反馈,就说明我们添加系统服务成功了。打开系统服务查看:

services.msc

WinSW04

WinSW05

就可以打开自定义配置服务了。创建服务默认是未启动的,想要立即启动点一次就行。

卸载服务

在frpc-WinSW.exe所在目录下,cmd运行如下命令即可(注意:卸载服务前如果服务在运行需要先停止服务)

frpc-WinSW.exe uninstall

WinSW06

查看更多命令

可以查看官方文档

也可以运行 -h,--help,-?,/?查看帮助信息自行食用。

WinSW07


WinSW使用批处理

为了大家更方便地用WinSW来使用frpc,七梦为大家写了个bat批处理。我就奔着开源的想法就不封包为exe了哈(反正也不是很难的东西),复制以下命令保存为.bat即可食用(记得放到frpc文件夹哟)

@echo off
mode con cols=44 lines=20
title 设置frpc为系统服务by.QIMENG
color 0a
:0
cls
echo=
echo=
echo 请输入序号:
echo ============================================
echo=
echo              1.生成frpc系统服务
echo=
echo              2.启动frpc系统服务
echo=
echo              3.停止frpc系统服务
echo=
echo              4.查看frpc服务状态
echo=
echo              5.打开系统服务
echo=
echo              9.删除frpc系统服务
echo=
echo              x.退出
echo=
echo ============================================
echo=
set /p num=您的选择:
echo=
if "%num%"=="1" goto 1
if "%num%"=="2" goto 2
if "%num%"=="3" goto 3
if "%num%"=="4" goto 4
if "%num%"=="5" goto 5
if "%num%"=="9" goto 9
if "%num%"=="x" goto x
echo “%num%”不是有效的选项,请输入菜单选项
pause
goto 0

:1
%~dp0/frpc-WinSW.exe install
echo  服务生成成功!!!
pause
goto 0

:2
net start frpc
echo  服务启动成功!!!
pause
goto 0

:3
net stop frpc
echo  服务停止成功!!!
pause
goto 0

:4
@echo off
for /f "skip=3 tokens=4" %%i in ('sc query frpc') do set "zt=%%i" &goto :chakan
:chakan
if /i "%zt%"=="RUNNING" (
    echo frpc服务正在运行。
    pause
    goto 0
) else (
    echo frpc服务处于停止状态。
    pause
    goto 0
)

:5
start services.msc
goto 0

:x
exit

:9
@echo off
for /f "skip=3 tokens=4" %%i in ('sc query frpc') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
    echo 已经发现该服务在运行。
    echo 准备关闭该服务。。。
    net stop frpc
    echo 停止frpc服务完成,请确认有没有错误发生。
    pause
    echo 该服务现在处于停止状态。
    echo 准备删除该服务。。。
    %~dp0/frpc-WinSW.exe uninstall
    echo 删除frpc服务完成,请确认有没有错误发生。
) else (
    echo 该服务现在处于停止状态。
    echo 准备删除该服务。。。
    %~dp0/frpc-WinSW.exe uninstall
    echo 删除frpc服务完成,请确认有没有错误发生。
)
pause
goto 0

WinSW08

WinSW软件使用还是需要一点基础的,需要编辑配置文件,是否还有更简单的软件呢?那NSSM就是你的最优选,你看了我的教程我相信你很快就上手了。
拓展阅读: 使用NSSM将程序安装成Windows服务

转载请注明出处,谢谢!

如果觉得本文对您有帮助,可以支持下博主,谢谢啦!!!

留言板 | 博客主页
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇