Как я могу отложить удаление файла до следующей перезагрузки из моей программы? - PullRequest
6 голосов
/ 30 марта 2011

Моему приложению необходимо удалить некоторые файлы, но это должно происходить до следующего запуска Windows.

Что я делаю сейчас, так это записываю строковое значение в ключ реестра RunOnce:

Command.com /c del c:\some file.ext

но я наблюдаю проблему с путями со встроенными пробелами.Я должен сказать, что я пробовал это тоже:

Command.com /c del "c:\some file.ext"

Но это не решает проблему, но делает ее хуже: не удаление любого файла, независимо от встроенных пробелов!

Чтоправильный способ удаления файлов из моей программы отложен до следующей перезагрузки?

Спасибо.

Ответы [ 3 ]

28 голосов
/ 30 марта 2011

Не используйте RunOnce и не используйте Command.com. Если вы настаиваете на использовании чего-либо, используйте %COMSPEC% /c. У вас есть лучший вариант.

Используйте MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT вместо:

if not MoveFileEx(PChar(YourFileToDelete), nil, MOVEFILE_DELAY_UNTIL_REBOOT) then
  SysErrorMessage(GetLastError);
2 голосов
/ 30 марта 2011

Вместо этого используйте cmd.exe. Это «новая» командная строка начиная с Windows NT.

cmd.exe /c del "c:\some file.ext"
1 голос
/ 30 марта 2011

Просто предположение: похоже, вы используете «DOS» command.com, который работает только с короткими именами файлов.Если вы используете Windows 2000 и более поздние версии, используйте cmd.exe вместо command.com и, да, используйте двойные кавычки.

...