我有一个自动更新系统,可以在重启时替换我现有的程序文件。(可以说,这是一个非常复杂的程序,有许多驱动程序、服务和用户级模块。真的没有别的办法了。相信我。)
在MOVEFILE_DELAY_UNTIL_REBOOT中使用函数MoveFileEx来设置此文件替换。正常情况下,我发现它工作得很好。但是,如果源文件和目标文件位于不同的驱动器上,则会删除目标文件,但不会移动源文件。结果是,当用户在不同于系统分区的驱动器上安装软件时,更新将删除产品文件,而不是更新它们。
现在,我在MoveFileEx的文档中看到,在将文件从一个卷移动到另一个卷时,应该使用MOVEFILE_COPY_ALLOWED。但它也说明该标志不能与MOVEFILE_DELAY_UNTIL_REBOOT一起使用。
问:当源和目标不在同一卷上时,如何在重新启动时移动文件,覆盖现有文件?
发布于 2009-06-18 16:30:33
为什么不直接将文件复制到用户安装程序的驱动器上呢?
据我所知,没有直接的方法可以只依靠这个函数来做你想做的事情。
在同一个驱动器上找到可写的位置可能是一个问题,但你提到你有服务-如果他们以LocalSystem权限运行,让他们写新文件。
我使用的另一个简单的更新机制(虽然不适用于驱动程序)是有专门的更新程序- kill/end everything,让更新程序完成它的工作,然后重新启动所有东西。
https://stackoverflow.com/questions/1013689
复制相似问题