2011-10-15 31 views
5

私は、再起動後にマシンをいくつかのファイルを削除するには、以下のコマンドを使用します。延期されたMoveFileEx操作をキャンセルするにはどうすればよいですか?

MoveFileEx(PChar(File_Address), Nil, MOVEFILE_DELAY_UNTIL_REBOOT); 

は、どのように私は、このコマンドの実行をキャンセルし、再起動後に削除からファイルを防ぐことができますか?

+2

これを行う方法はサポートされていないようです。この要求を推進しているのは何ですか? –

+2

最も簡単な方法は、あなたが絶対に削除したいと思うまで、最初にMoveFileExを呼び出してファイルを削除しないことです。 –

答えて

13

このように削除するエンキューファイルは、HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperationsのレジストリに格納されます。おそらく、ファイルが削除されないように、そこからエントリを削除することができます。私はこのためのAPI関数を見つけることができませんでした。

+4

+1。 DelphiのTRegistryクラスまたはAPIを使用してそのレジストリキーからエントリを削除することはできますが、Vista以上では管理者としてログインする必要があります(通常のユーザーはHKLMに書き込み/削除できません) 。もちろん、ファイルを削除することを確実に確かめるまで、最初の場所にエントリを作成しないほうが良い解決策です。 :) –

0

私はあなたが(それはまだ削除されていないので)ファイルをコピーして、再起動時に所定の位置にそれを戻すために

MoveFileEx(copy_of_file, original_file, MOVEFILE_DELAY_UNTIL_REBOOT) 

を使用することができると思います。

ケンホワイトが指摘しているように、最初はこの状況を避ける方がずっと良いでしょう。

+0

[実際には](http://msdn.microsoft.com/en-us/library/Aa365240.aspx)が文書化されています。 _ "移動および削除操作は、起動時に呼び出し元のアプリケーションで指定された順序と同じ順序で実行されます。" _ – CodeCaster

+0

@CodeCaster、ありがとうございます。私はそれに応じて編集しました。 –

関連する問題