4

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

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

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

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

4

1 回答 1

2

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

据我所知,仅依靠此功能没有直接的方法可以做您想做的事情。

在同一个驱动器上查找可写位置在 Vista 上可能是个问题,但您提到您有服务 - 如果它们以 LocalSystem 特权运行,则让它们写入新文件。

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

于 2009-06-18T16:30:33.240 回答