#windows #delphi #winapi #delphi-7
#Windows #delphi #winapi #delphi-7
Вопрос:
Я использую приведенную ниже команду для удаления некоторых файлов после перезагрузки компьютера:
MoveFileEx(PChar(File_Address), Nil, MOVEFILE_DELAY_UNTIL_REBOOT);
Как я могу отменить выполнение этой команды и предотвратить удаление файлов после перезагрузки?
Комментарии:
1. Похоже, что нет поддерживаемого способа сделать это. Что движет этим запросом?
2. Самый простой способ — не вызывать
MoveFileEx
удаление файла в первую очередь, пока вы не будете абсолютно уверены, что хотите его удалить.
Ответ №1:
Файлы, которые вы ставите в очередь на удаление таким образом, помещаются в реестр ниже HKLMSystemCurrentControlSetControlSession ManagerPendingFileRenameOperations
. Возможно, вы можете удалить записи оттуда, чтобы предотвратить удаление файлов. Я не смог найти функцию API для этого.
Комментарии:
1. 1. Вы можете удалить запись из этого раздела реестра, используя класс TRegistry Delphi или API напрямую, но обратите внимание, что в Vista и выше для этого вам потребуется войти в систему как администратор (обычные пользователи не могут записывать / удалять из HKLM). Лучшим решением, конечно, является не создавать запись в первую очередь, пока вы не будете абсолютно уверены, что хотите удалить файл. 🙂
Ответ №2:
Я думаю, вы могли бы скопировать файл (поскольку он еще не был удален), а затем использовать
MoveFileEx(copy_of_file, original_file, MOVEFILE_DELAY_UNTIL_REBOOT)
чтобы вернуть его на место во время перезагрузки.
Однако, как указал Кен Уайт, было бы намного лучше избежать этой ситуации в первую очередь.
Комментарии:
1. Это действительно задокументировано. «Операции перемещения и удаления выполняются во время загрузки в том же порядке, в котором они указаны в вызывающем приложении «.
2. @CodeCaster, спасибо, и хорошо заметил. Я отредактировал соответствующим образом.