V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Koril
V2EX  ›  问与答

使用 PyQT6 + Nuitka 制作的 exe 小工具,如何在线更新?

  •  
  •   Koril · 98 天前 · 979 次点击
    这是一个创建于 98 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    给其他部门的小伙伴开发一个工具,使用的是 PyQT6 + Nuitka 制作的单个 exe 小工具。

    后面可能要经常修改更新,所以想要试着做一个自动在线更新的功能。

    我的想法

    目前的思路是:

    1. 主窗口开启前,检查公网服务器的 version.json 信息,和当前版本对比,判断是否需要更新。
    2. 如果需要更新,把放在服务器上最新的 exe 下载下来。
    3. 把 bat 脚本内容写到名为 update.bat 文件中,通过 subprocess.Popen 来启动这个 update.bat 文件。
    4. update.bat 主要执行替换和启动新版本软件的操作。

    现在按照这个思路,基本已经实现了(下载新版本+替换),但是 update.bat 里面 start "" "app.exe",不知道为啥,始终无法成功执行。

    想请教的是,业界标准的做法是啥,有什么可以参考的项目么?

    4 条回复    2025-06-11 17:24:32 +08:00
    hwdq0012
        1
    hwdq0012  
       98 天前
    windows 得有辅助更新器,或做成插件化,在加载插件之前检查更新,替换动态库
    nanhezzb
        2
    nanhezzb  
       98 天前
    脚本就加点 echo 看看代码前后是否执行;
    更新前肯定需要结束 app.exe 吧,或者换 explorer "app.exe" 试试。
    myxingkong
        3
    myxingkong  
       98 天前
    正在运行的程序无法删除,但可以重命名或移动。一种方法是将当前程序重命名,添加 _old 后缀,然后下载新的可执行程序。下载完成后,启动新程序并退出旧程序。接着,在新程序启动时检测是否存在带 _old 后缀的程序,如果有,则将其删除。
    vialon17
        4
    vialon17  
       98 天前
    之前做过差不多的更新器,运行 start 前 先 cd 过去就行了。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4875 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:26 · PVG 17:26 · LAX 02:26 · JFK 05:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.