winapi – MoveFileEx使用MOVEFILE_DELAY_UNTIL_REBOOT删除而不是移动

我有一个自动更新系统,可以在重新启动时替换我现有的程序文件. (可以说,这是一个非常复杂的程序,包含许多驱动程序,服务和用户级模块.没有别的办法.相信我.)

函数MoveFileEx与MOVEFILE_DELAY_UNTIL_REBOOT一起用于设置此文件替换.通常情况下,我发现它的工作正常.但是,如果源文件和目标文件位于不同的驱动器上,则会删除目标,但不会移动源.结果是,当用户在不同于系统分区的驱动器上安装软件时,更新将删除产品文件而不是更新它们.

现在,我在MoveFileEx的文档中看到,当将文件从一个卷移动到另一个卷时,应该使用MOVEFILE_COPY_ALLOWED.但它也说该标志不能与MOVEFILE_DELAY_UNTIL_REBOOT一起使用.

问:当源和目标不在同一卷上时,如何在重新启动时移动文件,覆盖现有文件?

最佳答案 为什么不将文件复制到用户安装程序的驱动器?

据我所知,没有直接的方法来做你想要的只依赖于这个功能.

在同一个驱动器上查找可写位置可能是Vista上的一个问题,但是你提到你有服务 – 如果他们使用LocalSystem运行,那么他们就会编写新文件.

我使用的另一个简单的更新机制(不适用于驱动程序)是拥有专用的更新程序 – 杀死/结束所有内容,让更新程序完成其工作并重新启动所有内容.

点赞