MoveFileEx使用MOVEFILE_DELAY_UNTIL_REBOOT删除而不是移动

时间:2009-06-18 16:23:21

标签: winapi movefileex

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

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

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

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

1 个答案:

答案 0 :(得分:2)

为什么不直接将文件复制到用户安装程序的驱动器上?

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

在Vista上查找同一驱动器上的可写位置可能是一个问题,但是你提到你有服务 - 如果他们使用LocalSystem运行,则让他们写新文件。

我使用过的另一种简单的更新机制(不适用于驱动程序)是拥有专用的更新程序 - 终止/终止所有内容,让更新程序完成其工作并重新启动所有内容。