![]() |
PendingFileRenameOperations
Для того чтобы удалить файл после перезагрузки компьютера Windows использует PendingFileRenameOperations.
В разделе реестра HKLM\SYSTEM\CurrentControlSet\Control\Session Manager создаётся многостроковая переменная PendingFileRenameOperations. В качестве аргументов в неё записываются имена файлов с их расположением которые надо переименовать в нуль! Этот механизм используют и инсталяторы в том же числе. Но использовать встроенную возможность в InnoSetup не всегда удобно. Там в таком случае выводится окно с сообщением выполнить перезагрузку, или что-то другое ещё я уж не помню. Возможно и не было проблеммы, но я как любитель тихой установки сразу же отказался от этого и придумал альтернативу. Программа на ассемблере, пример из реальной моей сборки. MoveFileEx32.asm: Код:
include '%fasm%\win32ax.inc' Код:
include '%fasm%\win64ax.inc' Ну впрочем можно с переменными окружения разобраться, однако если инсталлер зделан на две платформы, то 64-битный код всёравно нельзя использовать в x86. Я не программист сразу предупреждаю. :) Почему ассемблер? Потому-что скачать 849 kilobytes и установить очень легко. Это вам не Microsoft Visual Studio! :) flat assembler 1.68 for Windows http://flatassembler.net/download.php Использовать программу можно для различных целей, кому как удобнее. Работает код корректно! Записать же руками задачу в реестр довольно сложно с подсчётами нулей всегда проблемы возникают. Особенно если запись добовляется многократно из разных инсталяторов к примеру. В InnoSetup я пытался в [registry] multisz через всякие комбинации {break} и {olddata} зделать, ничего из этого не вышло. Для использования программы в InnoSetup пишем следущее (в качестве примера): Код:
; ... |
Время: 16:40. |
Время: 16:40.
© OSzone.net 2001-