再起動時に既存のプログラムファイルを置き換える自動更新システムがあります。(言うまでもなく、これは多くのドライバー、サービス、およびユーザーレベルのモジュールを備えた非常に複雑なプログラムです。他に方法はありません。私を信じてください。)
関数MoveFileExは、このファイル置換をセットアップするためにMOVEFILE_DELAY_UNTIL_REBOOTとともに使用されます。通常は問題なく動作することがわかりました。ただし、ソースファイルとターゲットファイルが異なるドライブにある場合、ターゲットは削除されますが、ソースは移動されません。その結果、ユーザーがシステムパーティションとは別のドライブにソフトウェアをインストールすると、更新によって製品ファイルが更新されるのではなく削除されます。
これで、MoveFileExのドキュメントで、ファイルをあるボリュームから別のボリュームに移動するときにMOVEFILE_COPY_ALLOWEDを使用する必要があることがわかりました。ただし、フラグはMOVEFILE_DELAY_UNTIL_REBOOTでは使用できないことも示しています。
Q:ソースとターゲットが同じボリューム上にない場合、再起動時にファイルを移動して既存のファイルを上書きするにはどうすればよいですか?