jar 包制作 exe 文件如何在线升级 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuyunlong
V2EX    Java

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

  •  
  •   liuyunlong
    1713612859 2024-09-09 18:02:56 +08:00 4285 次点击
    这是一个创建于 396 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 目前 jar 包转 exe ,是通过 exe4j 制作的;

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

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

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

    update.exe 更新 app.exe
    app.exe 更新 update.exe
    Sum0l
        19
    Sum0l  
       197 天前
    那如何实现无确认自动更新呢?有些场景需要部署的程序版本永远保持最新,且不需要确认。有相关开源项目参考吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 20:44 PVG 04:44 LAX 13:44 JFK 16:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86