99101617 发表于 2024-10-18 16:42:10

解压缩灵异事件

做一个更新程序,逻辑是下载网上的更新压缩包到软件根目录然后解压缩覆盖,当压缩包里是文件夹和一个普通exe程序时就可以,当压缩包里包含根目录下dll文件时就解压缩失败,如果将dll和exe合并也会解压缩失败,有没有大佬能理解这是啥原因?就卡在解压缩这里了,感觉遇上鬼了!

火绒 发表于 2024-10-18 17:53:59

你试试火山模块的中 压缩包读写类_.解压到

小小小小鸟 发表于 2024-10-18 18:03:51

要是dll文件已经存在而且被调用的话,应该会写出失败,如果没有的话,那的确有问题了

Xelloss0618 发表于 2024-10-18 18:08:42

文件被占用,没办法覆盖解压的

99101617 发表于 2024-10-18 20:18:26

综合我发的三个帖子的讨论,已找到解决方向,下面是我的测试过程,说不定以后还有人遇到相同问题:
解压命令我采用的是:压缩包读写类_.解压到
dll与exe融合我用的是Enigma Virtual Box,融合的执行文件我下面简称融合版,没有融合的简称原版。
RAR格式和ZIP格式都测了,结果相同。

融合版执行文件升级   融合版更新包    无法升级
融合版执行文件升级   原版更新包       无法升级
融合版执行文件升级   去除DLL文件的原版更新包       无法升级
原版执行文件升级      融合版更新包   升级成功
原版执行文件升级      原版更新包       无法升级
原版执行文件升级      去除DLL文件的原版更新包       升级成功

原因总结:打开升级程序时系统的dll文件被占用,导致带有dll文件的解压缩无法成功覆盖,升级失败。
融合版执行文件只是表面隐藏了dll文件,实际还是被占有了,也就无法被覆盖。

解决方法:1.正在尝试的:由于dll较少,系统自带的无法指定目录的两个采用静态编译,其余正好都可以动态加载,让部分dll指定目录,让根目录无dll文件,这样应该就可以更新了。
2.找其他更新程序案例看有没有更好的实现思路。

hyi 发表于 2024-10-18 22:09:45

升级不是应该下载,解压到一个临时目录,然后结束程序后再移动过去替换吗?

dxp04 发表于 2024-10-22 08:38:59

99101617 发表于 2024-10-18 20:18
综合我发的三个帖子的讨论,已找到解决方向,下面是我的测试过程,说不定以后还有人遇到相同问题:
解压命 ...

在程序目录,建一个子目录,子目录写好更新程序exe ,主程序检测到更新,执行更新exe并退出主程序,这样更新就没问题,不存在覆盖失败

99101617 发表于 2024-10-22 12:09:31

dxp04 发表于 2024-10-22 08:38
在程序目录,建一个子目录,子目录写好更新程序exe ,主程序检测到更新,执行更新exe并退出主程序,这样更 ...

好办法,我试试
页: [1]
查看完整版本: 解压缩灵异事件