递归火山软件开发平台

标题: 解压缩灵异事件 [打印本页]

作者: 99101617    时间: 2024-10-18 16:42
标题: 解压缩灵异事件
做一个更新程序,逻辑是下载网上的更新压缩包到软件根目录然后解压缩覆盖,当压缩包里是文件夹和一个普通exe程序时就可以,当压缩包里包含根目录下dll文件时就解压缩失败,如果将dll和exe合并也会解压缩失败,有没有大佬能理解这是啥原因?就卡在解压缩这里了,感觉遇上鬼了!
(, 下载次数: 9)

作者: 火绒    时间: 2024-10-18 17:53
你试试火山模块的中 压缩包读写类_.解压到
作者: 小小小小鸟    时间: 2024-10-18 18:03
要是dll文件已经存在而且被调用的话,应该会写出失败,如果没有的话,那的确有问题了
作者: Xelloss0618    时间: 2024-10-18 18:08
文件被占用,没办法覆盖解压的
作者: 99101617    时间: 2024-10-18 20:18
综合我发的三个帖子的讨论,已找到解决方向,下面是我的测试过程,说不定以后还有人遇到相同问题:
解压命令我采用的是:压缩包读写类_.解压到
dll与exe融合我用的是Enigma Virtual Box,融合的执行文件我下面简称融合版,没有融合的简称原版。
RAR格式和ZIP格式都测了,结果相同。

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

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

解决方法:1.正在尝试的:由于dll较少,系统自带的无法指定目录的两个采用静态编译,其余正好都可以动态加载,让部分dll指定目录,让根目录无dll文件,这样应该就可以更新了。
2.找其他更新程序案例看有没有更好的实现思路。
作者: hyi    时间: 2024-10-18 22:09
升级不是应该下载,解压到一个临时目录,然后结束程序后再移动过去替换吗?
作者: dxp04    时间: 2024-10-22 08:38
99101617 发表于 2024-10-18 20:18
综合我发的三个帖子的讨论,已找到解决方向,下面是我的测试过程,说不定以后还有人遇到相同问题:
解压命 ...

在程序目录,建一个子目录,子目录写好更新程序exe ,主程序检测到更新,执行更新exe并退出主程序,这样更新就没问题,不存在覆盖失败
作者: 99101617    时间: 2024-10-22 12:09
dxp04 发表于 2024-10-22 08:38
在程序目录,建一个子目录,子目录写好更新程序exe ,主程序检测到更新,执行更新exe并退出主程序,这样更 ...

好办法,我试试




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4