2011-10-15 13 views
5

Io uso il seguente comando per eliminare alcuni file dopo il riavvio della macchina:Come annullare l'operazione MoveFileEx differita?

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

Come posso annullare l'esecuzione di questo comando e impedire che i file di eliminare dopo il riavvio?

+2

Sembra che non ci sia alcun modo supportato per farlo. Qual è la guida di questa richiesta? –

+2

Il modo più semplice è non chiamare 'MoveFileEx' per eliminare il file in primo luogo fino a quando non sei assolutamente sicuro di volerlo cancellare. –

risposta

13

I file che si accodano per la cancellazione in questo modo vengono inseriti nel registro sotto HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations. Forse puoi cancellare le voci da lì, per evitare che i file vengano cancellati. Non sono riuscito a trovare una funzione API per questo.

+4

+1. Puoi eliminare la voce dalla chiave del registro utilizzando direttamente la classe TRegistry di Delphi o l'API, ma tieni presente che su Vista e sopra dovrai accedere come amministratore (gli utenti normali non possono scrivere/eliminare da HKLM) . La soluzione migliore, ovviamente, è non creare la voce in primo luogo fino a quando non sei assolutamente certo di voler eliminare il file. :) –

0

Credo che si potrebbe copiare il file (dal momento che non è stato ancora eliminato) e quindi utilizzare

MoveFileEx(copy_of_file, original_file, MOVEFILE_DELAY_UNTIL_REBOOT) 

di rimetterlo al suo posto durante il riavvio.

Come ha sottolineato Ken White, tuttavia, sarebbe molto meglio evitare questa situazione in primo luogo.

+0

È [infatti] (http://msdn.microsoft.com/en-us/library/Aa365240.aspx) documentato. _ "Le operazioni di spostamento e cancellazione vengono eseguite al momento dell'avvio nello stesso ordine in cui sono specificate nell'applicazione chiamante." _ – CodeCaster

+0

@CodeCaster, grazie e ben individuato. Ho modificato di conseguenza. –