dxp04 发表于 2024-10-22 08:38 好办法,我试试 |
99101617 发表于 2024-10-18 20:18 在程序目录,建一个子目录,子目录写好更新程序exe ,主程序检测到更新,执行更新exe并退出主程序,这样更新就没问题,不存在覆盖失败 |
升级不是应该下载,解压到一个临时目录,然后结束程序后再移动过去替换吗? |
综合我发的三个帖子的讨论,已找到解决方向,下面是我的测试过程,说不定以后还有人遇到相同问题: 解压命令我采用的是:压缩包读写类_.解压到 dll与exe融合我用的是Enigma Virtual Box,融合的执行文件我下面简称融合版,没有融合的简称原版。 RAR格式和ZIP格式都测了,结果相同。 融合版执行文件 升级 融合版更新包 无法升级 融合版执行文件 升级 原版更新包 无法升级 融合版执行文件 升级 去除DLL文件的原版更新包 无法升级 原版执行文件 升级 融合版更新包 升级成功 原版执行文件 升级 原版更新包 无法升级 原版执行文件 升级 去除DLL文件的原版更新包 升级成功 原因总结:打开升级程序时系统的dll文件被占用,导致带有dll文件的解压缩无法成功覆盖,升级失败。 融合版执行文件只是表面隐藏了dll文件,实际还是被占有了,也就无法被覆盖。 解决方法:1.正在尝试的:由于dll较少,系统自带的无法指定目录的两个采用静态编译,其余正好都可以动态加载,让部分dll指定目录,让根目录无dll文件,这样应该就可以更新了。 2.找其他更新程序案例看有没有更好的实现思路。 |
文件被占用,没办法覆盖解压的 |
要是dll文件已经存在而且被调用的话,应该会写出失败,如果没有的话,那的确有问题了 |
你试试火山模块的中 压缩包读写类_.解压到 |
|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )
GMT+8, 2024-10-23 06:00 , Processed in 0.090104 second(s), 22 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.