2009-06-18 138 views
4

我有一个自动更新系统,在重新启动时替换我现有的程序文件。 (可以说,这是一个非常复杂的程序,包含许多驱动程序,服务和用户级别的模块,实际上没有其他办法,请相信我)MoveFileEx与MOVEFILE_DELAY_UNTIL_REBOOT删除而不是移动

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

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

问:我如何才能将在重新启动一个文件,覆盖现有文件,当源和目标是不一样的卷上?

回答

2

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

据我看到有做你想要仅仅依靠这个功能没有什么直接的方式。

同一驱动器上找到可写入的位置可能是在Vista上的问题,但你提到你的服务 - 如果他们运行与本地系统privilleges让他们写新的文件。我已经使用(不工作的司机虽然)

另外一个简单的更新机制是有专门的更新程序 - 杀/结束一切,让更新程序完成其工作,并重新开始一切。

+0

+1把文件应用程序目录的子目录一个悬而未决重启 – 2009-06-18 16:34:52