2011-10-15 25 views
5

que utilice el comando siguiente para eliminar algunos archivos después de reiniciar la máquina:Cómo cancelar la operación diferida MoveFileEx?

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

¿Cómo puedo cancelar la ejecución de este comando y evitar que los archivos de eliminar al reiniciar el sistema?

+2

Parece que no hay una forma admitida de hacerlo. ¿Qué está impulsando esta solicitud? –

+2

La manera más fácil es no llamar 'MoveFileEx' para eliminar el archivo en primer lugar hasta que esté absolutamente seguro de que desea eliminarlo. –

Respuesta

13

Los archivos que pone en cola para su eliminación de esta manera se colocan en el registro bajo HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations. Quizás pueda eliminar entradas desde allí para evitar que se eliminen los archivos. No pude encontrar una función API para esto.

+4

+1. Puede eliminar la entrada de esa clave de registro utilizando la clase TRegistry de Delphi o la API directamente, pero tenga en cuenta que en Vista y superior deberá iniciar sesión como administrador para hacerlo (los usuarios normales no pueden escribir/eliminar de HKLM) . La mejor solución, por supuesto, es no crear la entrada en primer lugar hasta que esté absolutamente seguro de querer eliminar el archivo. :) –

0

Creo que se puede copiar el archivo (ya que no se ha eliminado todavía) y luego usar

MoveFileEx(copy_of_file, original_file, MOVEFILE_DELAY_UNTIL_REBOOT) 

para poner de nuevo en su lugar durante el reinicio.

Sin embargo, como Ken White ha señalado, sería mucho mejor evitar esta situación en primer lugar.

+0

Está [de hecho] (http://msdn.microsoft.com/en-us/library/Aa365240.aspx) documentado. _ "Las operaciones de mover y eliminar se llevan a cabo en el momento del inicio en el mismo orden en que se especifican en la aplicación de llamada." _ – CodeCaster

+0

@CodeCaster, gracias y bien vistos. He editado en consecuencia. –

Cuestiones relacionadas