热更从_temp恢复的BUG

  • Creator 版本: 2.4
  • 目标平台: Windows
  • 重现方式:随机
  • 重现概率: 10%

热更时,先是将资源下载到a_temp文件夹,完成后放回a,并且删除a_temp

这个过程有一定几率失败,失败后,我在系统资源管理器中手工删除时,就会弹出大家熟悉的“操作无法完成,因为其中的文件夹或文件已在另一程序中打开,请关闭…”

然后我在资源监视器中查找句柄,发现a_temp目录下有个xxx.xxx.tmp文件被占用,正是当前的游戏占用的

初步怀疑跟windows机制有关,毕竟windows这种SB的问题不是今天才遇到
其它平台还没试,在不重启游戏的情况下,有比较好的解决方案没?

最终还是修改源码解决了
难道这问题就没人遇到吗?a_temp恢复到a只有我不能100%成功吗,还是没人打windows包?

mark 一下,同样在做windows下开发,这块刚开发完,这个问题暂时还没遇到,后面怎么解决的能分享下吗?

没在WINDOWS下做过更新,但就按照你的现象 如果删除目录不成功 那一定是里面的文件有打开后没关闭的 最典型的情况就是这个目录里的某个文件正在被下载中 那么就会有这种情况 ,但你以为下载完成了 或者关闭了 ,看看代码方面是不是有这个情况吧

更新完成会有jsb.EventAssetsManager.UPDATE_FINISHED事件的,如果出现我说的情况,永远不会有这事件,只有等游戏进程关闭后重新再更新一次,对于分包更新,显然用户体验不好

我更不可能在更新的过程中去做访问文件的骚操作,这应该是windows本身的问题,其实之前用过的其它软件也遇到过,否则360就不会做强制解除占用的工具了

对了,我是在win7下遇到的,7以上可能没这问题了

不难,在AssetsManageEx.app中找到setStoragePath,先把宏TEMP_PACKAGE_SUFFIX替换成类似于_temp1235431这样的随机名称

然后在更新时做个计时器,如果在一段时间内下载字节数没变化,说明出问题了,就全部重新来过

重新来过时,必然又是另个目录了,之前出问题的目录还是被占用的,不去理会,等用户下次再进入游戏时,扫描一下包含_temp名称的目录,删掉