使用bat批处理脚本处理exe程序的自更新及启动

哈喽,大家好呀,五一劳动节快乐!我是逐梦博客的小编Dean,今天为大家介绍如何利用bat编写批处理脚本来实现程序的自更新和启动。

一、背景

起因是用node.js帮朋友写了一个批量处理事务的应用,并使用pkg将node程序打包成了exe应用,考虑到node中有不少地方使用了process.exit,如果直接运行exe应用,那么在执行process.exit后,程序就直接退出了,无法看到我们打印出的错误信息。

二、用批处理脚本启动应用

为了处理这个上面的情况,我考虑用批处理脚本来启动应用,假设我们的exe文件名为register.exe,脚本内容如下:

@echo off
cd /d %~dp0

set %BIN_FILE%=register.exe

start "" /B /WAIT %BIN_FILE%

pause

注意pause命令一定不能少,这个是程序退出后命令行窗口不退出的关键。在上面的脚本中我们定义了exe文件的路径,并使用start命令启动了exe应用,其中/B表示在后台运行,不阻塞当前命令行窗口,即以静默的方式启动应用程序,并且不会开启新的命令行窗口,/WAIT表示等待启动的程序退出后才继续执行后续的命令。

三、用批处理脚本实现程序自更新

通过上面的步骤,我们已经实现了通过批处理脚本启动程序并且程序退出命令行不退出,但是依然有一个问题,每一次在更改程序后都需要将程序发送给对方很是麻烦,而且也容易搞乱掉,如何简单快速的实现应用的自更新呢,这里我还是考虑使用批处理脚本,通过批处理脚本请求记录了应用最新版本的URL得到最新版本号,并与本地记录的版本号,如果不一致则重新下载程序,示例脚本如下:

@echo off

cd /d %~dp0

set BIN_URL=/xxx/register.exe
set VERSION_URL=/demo/xxx/version.txt
set VERSION_FILE=version.txt
set TMPFILE=tmp.txt
set BIN_FILE=register.exe

"./bin/wget" --no-check-certificate -q -O %TMPFILE% %VERSION_URL%

set /p LASEST_VERSION=<%TMPFILE%

set /p VERSION=<%VERSION_FILE%

del /q %TMPFILE%

if %VERSION% NEQ %LASEST_VERSION% (
  echo updating software, waiting...
  "./bin/wget" --progress=bar:force --no-check-certificate -O %BIN_FILE% %BIN_URL%
  echo %LASEST_VERSION% > %VERSION_FILE%
)

start "" /B /WAIT %BIN_FILE%

pause

注意代码中的URL地址不是真实的,只是示例,使用的时候需根据自己的情况更改,其中cd /d %~dp0是切换到当前目录,这里使用wget来获取最新版本号,和下载最新应用,如果加了-q则不会有进度条,注意要在最新软件下载完毕后再将最新版本号更新到本地文件中,然后启动应用,这样以后我们每次运行该批处理将本都会先检查是否有更新,有更新先更新应用,最后打开应用。

四、写在最后

上面我们介绍了使用批处理脚本自更新和启动应用,但是在实际使用的过程中还可能会遇到一些其他的问题,比如运行bat脚本并打开控制台后,发现控制台没办法关闭,这个时候我们杀死所有脚本开启的应用进程,比如:taskkill /F /IM register.exe

  • 支付宝二维码 支付宝
  • 微信二维码 微信

本文地址: /bat-software-auto-upgrade.html

版权声明: 本文为原创文章,版权归 逐梦个人博客 所有,欢迎分享本文,转载请保留出处!

相关文章