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

jar 包制作 exe 文件如何在线升级

  •  
  •   liuyunlong ·
    1713612859 · 9 天前 · 2272 次点击
    1. 目前 jar 包转 exe ,是通过 exe4j 制作的;

    2. 制作安装包,是通过 innosetup 制作的;

    问题: 在线升级有一个触发的接口,因为是一个 Springboot 项目,所以使用了启动回调机制 CommandLineRunner ,但是我想实现无缝升级。从服务器直接替换 exe 。然后在运行程序

    18 条回复    2024-09-10 11:55:36 +08:00
    codehz
        1
    codehz  
       9 天前
    替换运行中的 exe 文件需要一些黑产级别的操作(估计会触发各种安全审计问题)
    Charkey
        2
    Charkey  
       9 天前
    排队学习下。这个未涉及不会
    Bingchunmoli
        3
    Bingchunmoli  
       9 天前 via Android
    好像一般是弄一个脚本放外面执行更新操作再调用启动然后再被 remove 掉
    importmeta
        4
    importmeta  
       9 天前
    我见过一个是,下个新的 exe ,旧的改个名。
    yinmin
        5
    yinmin  
       9 天前 via iPhone
    先把老 exe(自己)更名成临时文件名,把新 exe 用原来的名字,运行新 exe 终止自己;新 exe 删除临时文件
    yidinghe
        6
    yidinghe  
       9 天前 via Android   ❤️ 1
    软件和更新是独立的两个进程。启动更新进程后,更新步骤为:检查版本,下载和校验更新包,停止当前应用软件进程,备份(如果需要的话),应用更新,最后重启软件并退出更新进程。
    mylovesaber
        7
    mylovesaber  
       9 天前
    可以参考下 jetbrains 的 toolbox ,即多版本共存的方案,可以随时回滚,切换需要重启下应用
    90xchun
        8
    90xchun  
       9 天前 via iPhone
    你包装成了 exe4j 应该为了加入安装引导吧,和免去用户安装 jdk 的烦恼,要不你试下 graalvm native 打包为 exe 这种方式,升级基本也就是后台运行 bat 脚步,退出当前进程,完成替换启动就可以了。
    90xchun
        9
    90xchun  
       9 天前 via iPhone
    Spring boot 有 native 的方案,级别属于有手就能搞定
    90xchun
        10
    90xchun  
       9 天前 via iPhone
    只是 spring boot native 文件比较大,同时打包会变慢,测试会复杂一些
    Edcwsyh
        11
    Edcwsyh  
       9 天前
    @yinmin 但是这样内存的数据就没了吧, 不过游戏服务器倒挺多这么干的, 使用共享内存, 直接把进程 stop, 重新起一个服务重共享内存里加载数据就是无感的了....
    Narcissu5
        12
    Narcissu5  
       9 天前
    我理解 exe 只是一个启动器 ,更新的时候只要替换外围的 jar 包就可以
    dode
        13
    dode  
       9 天前
    还是 Linux 好,替换,重启
    liuyunlong
        14
    liuyunlong  
    OP
       8 天前
    目前是利用的额外一个程序 名称为'update.exe',也就是说 将 程序启动 ,触发 版本比对,如果不一致 提示升级,加入按钮确认机制,确认之后,回调 update.exe 启动,主进程关闭,进行 online 升级
    liuyunlong
        15
    liuyunlong  
    OP
       8 天前
    @importmeta 另外的问题是 这玩意已经给 客户用了,并且安装有 4000 + 下载
    rlds
        16
    rlds  
       8 天前
    不一定得替换吧?下载新的给个新的文件名如名称+版本号,启动新的,停止并删除旧的。
    rlds
        17
    rlds  
       8 天前
    感觉你上面提到的方案更好点,额外的一个 update.exe 来做这个事情。
    songco
        18
    songco  
       8 天前 via Android
    独立的 update.exe

    update.exe 更新 app.exe
    app.exe 更新 update.exe
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5653 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:47 · PVG 09:47 · LAX 18:47 · JFK 21:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.