4

再起動時に既存のプログラムファイルを置き換える自動更新システムがあります。(言うまでもなく、これは多くのドライバー、サービス、およびユーザーレベルのモジュールを備えた非常に複雑なプログラムです。他に方法はありません。私を信じてください。)

関数MoveFileExは、このファイル置換をセットアップするためにMOVEFILE_DELAY_UNTIL_REBOOTとともに使用されます。通常は問題なく動作することがわかりました。ただし、ソースファイルとターゲットファイルが異なるドライブにある場合、ターゲットは削除されますが、ソースは移動されません。その結果、ユーザーがシステムパーティションとは別のドライブにソフトウェアをインストールすると、更新によって製品ファイルが更新されるのではなく削除されます。

これで、MoveFileExのドキュメントで、ファイルをあるボリュームから別のボリュームに移動するときにMOVEFILE_COPY_ALLOWEDを使用する必要があることがわかりました。ただし、フラグはMOVEFILE_DELAY_UNTIL_REBOOTでは使用できないことも示しています。

Q:ソースとターゲットが同じボリューム上にない場合、再起動時にファイルを移動して既存のファイルを上書きするにはどうすればよいですか?

4

1 に答える 1

2

ユーザーがプログラムをインストールしたドライブにファイルをコピーしてみませんか?

私の知る限り、この関数だけに頼ってやりたいことを直接行う方法はありません。

同じドライブで書き込み可能な場所を見つけることはVistaで問題になる可能性がありますが、サービスがあると言います。LocalSystem特権で実行されている場合は、新しいファイルを書き込ませます。

私が使用したもう1つの簡単な更新メカニズム(ただし、ドライバーでは機能しません)は、専用の更新プログラムを用意することです。すべてを強制終了/終了し、更新プログラムに作業を任せて、すべてを再起動します。

于 2009-06-18T16:30:33.240 に答える