借助CMD命令实现AHK程序热更新

工作中会给同事制作一些AHK辅助程序,编译成EXE文件后分发给同事使用,有时同事反馈一些小问题,或者自己做了一些优化,又得重新分发给同事,虽然我们都处于同一个局域网,也可以访问同一个公共文件夹,但手动替换程序再运行总归有点麻烦,以下AHK代码可实现AHK程序热更新,彻底解决此问题

;首先设定一个局域网文件夹地址,用于存放最新版本的程序文件
路径:="\\192.168.100.16\辅助程序\"
#SingleInstance force
if FileExist(A_ScriptDir . "\更新.bat")
    FileDelete,%A_ScriptDir%\更新.bat
路径:=路径 . A_ScriptName
if FileExist(路径)
{
    FileGetTime,tmp1,%路径%
    FileGetTime,tmp2,%A_ScriptFullPath%
    if (tmp1>tmp2) ;局域网的文件比目前运行的文件修改日期更靠后
    {
        tmp1:=A_ScriptDir . "\更新.bat"
        FileAppend,
        (
        @echo off
        echo 程序有新版本,正在准备更新文件,稍后会重新启动
        ping 127.1 -n 1 >nul 2>nul
        :start
        tasklist /nh|find /i "%A_ScriptName%"
        if ERRORLEVEL 1 goto L1
        goto L2
        :L1
        echo 正在更新文件
        ping 127.1 -n 1 >nul 2>nul
        copy /y %路径% %A_ScriptDir%\
        if exist "%A_ScriptFullPath%" goto L3
        goto L1
        :L3
        cd %A_ScriptDir%\
        start %A_ScriptName%
        exit
        :L2
        echo 等待主程序退出
        ping 127.1 -n 1 >nul 2>nul
        goto start
        ),%tmp1%
        run %tmp1%
        ExitApp
    }
}

可将以上代码保存到一个.ahk脚本文件里,比如”D:\热更新.ahk”,然后只要在新写的脚本开头加上以下代码,便可让新脚本拥有热更新功能

#Include D:\热更新.ahk

给TA捐赠
共{{data.count}}人
人已捐赠
其他

(有偿)已完成==请教文件编码为base64的问题

2022-3-10 6:06:41

其他函数

UIAutomation类库-个人简化版

2022-3-11 23:13:46

6 条回复 A文章作者 M管理员
  1. 小热

    1

  2. 不想说什么

    都是 膜拜大佬们

  3. tornee

    goto不是不建议用吗

    • 五分钟

      这里的goto是cmd里的语句,ahk是不会执行的;
      用goto是为了在cmd里实现一个自定义的条件循环,高级编程语言不推荐使用goto是因为这个功能太过自由,用多了结构混乱(毕竟想跳哪就跳哪),会很容易产生BUG,而且程序难懂,换个人可能都看不懂想要干嘛?
      tips:其实高级语言的循环命令在汇编层面都是goto(jump指令),但这是编译器写的,所以没有BUG

    • aahk

      我认为(也许我的观点有错误)不应当过于关注语法或者推荐或者不推荐,应当使用函数或者类,把不好的语法,不推荐的语句和有毒的字符封装到代码块中,减小或消除影响和隐患。

      应当关注效果、效率和感受,只要感觉舒服,只要使用之后心情舒畅,多用一点GOTO也是无伤大雅的。把代码包裹起来,即使代码要作乱要造反也只是在函数内部或者类内部折腾,不会把毒副作用传递到函数体外部,加强封装外壳的强度。

      应当尊重不完美的语句和不完美的代码,特别是能够通过压力测试和环境测试的代码。

      只要能够在各种恶劣环境中生存下来的代码就是好代码,哪怕代码中含有GOTO语句或者直通内存读写。要与不完美的代码和谐相处,因为,世界上没有完美的事物。

    • 五分钟

      说的对,限制某些命令的使用是为了适应人的思维,因为人和机器理解程序的方式完全不一样,但机器不是程序的生产者,为了使人能够更简单快速的生产程序,并且机器也可以理解人生产出来的程序,才诞生了各种高级编程语言,实际上每种高级编程语言都是为了解决当时的一些编程痛点

个人中心
购物车
优惠劵
有新私信 私信列表
搜索