解压缩灵异事件
做一个更新程序,逻辑是下载网上的更新压缩包到软件根目录然后解压缩覆盖,当压缩包里是文件夹和一个普通exe程序时就可以,当压缩包里包含根目录下dll文件时就解压缩失败,如果将dll和exe合并也会解压缩失败,有没有大佬能理解这是啥原因?就卡在解压缩这里了,感觉遇上鬼了!你试试火山模块的中 压缩包读写类_.解压到 要是dll文件已经存在而且被调用的话,应该会写出失败,如果没有的话,那的确有问题了 文件被占用,没办法覆盖解压的 综合我发的三个帖子的讨论,已找到解决方向,下面是我的测试过程,说不定以后还有人遇到相同问题:
解压命令我采用的是:压缩包读写类_.解压到
dll与exe融合我用的是Enigma Virtual Box,融合的执行文件我下面简称融合版,没有融合的简称原版。
RAR格式和ZIP格式都测了,结果相同。
融合版执行文件升级 融合版更新包 无法升级
融合版执行文件升级 原版更新包 无法升级
融合版执行文件升级 去除DLL文件的原版更新包 无法升级
原版执行文件升级 融合版更新包 升级成功
原版执行文件升级 原版更新包 无法升级
原版执行文件升级 去除DLL文件的原版更新包 升级成功
原因总结:打开升级程序时系统的dll文件被占用,导致带有dll文件的解压缩无法成功覆盖,升级失败。
融合版执行文件只是表面隐藏了dll文件,实际还是被占有了,也就无法被覆盖。
解决方法:1.正在尝试的:由于dll较少,系统自带的无法指定目录的两个采用静态编译,其余正好都可以动态加载,让部分dll指定目录,让根目录无dll文件,这样应该就可以更新了。
2.找其他更新程序案例看有没有更好的实现思路。 升级不是应该下载,解压到一个临时目录,然后结束程序后再移动过去替换吗? 99101617 发表于 2024-10-18 20:18
综合我发的三个帖子的讨论,已找到解决方向,下面是我的测试过程,说不定以后还有人遇到相同问题:
解压命 ...
在程序目录,建一个子目录,子目录写好更新程序exe ,主程序检测到更新,执行更新exe并退出主程序,这样更新就没问题,不存在覆盖失败 dxp04 发表于 2024-10-22 08:38
在程序目录,建一个子目录,子目录写好更新程序exe ,主程序检测到更新,执行更新exe并退出主程序,这样更 ...
好办法,我试试
页:
[1]