Я использую Inno Setup 6.0.5 и регистрирую две библиотеки DLL расширения оболочки, которые аналогичны тем, что взяты из ownCloud. Одна DLL регистрирует динамическое контекстное меню, другая DLL добавляет оверлейные значки.
Я использую средства, которые Inno Setup предоставляет для выполнения этого шага. Это означает:
[Setup]
ChangesAssociations=true
ChangesEnvironment=true
[Files]
...
Source: "shell-integration\*"; DestDir: "{app}\shell-integration"; Flags: regserver 64bit; Check: IsAdminInstallMode;
Я наблюдаю следующее:
- После завершения настройки значки наложения не активны. Они появляются только после принудительного перезапуска explorer.exe вручную. Есть такие источники, как это, которые утверждают, что это возможно, вызывая
SHChangeNotify
иSendMessageTimeoutW
, но они явно ошибаются, так как я делает именно это (см.ChangesAssociations
иChangesEnvironment
, которые должны это делать). - После удаления каталог приложения не удаляется, поскольку файлы 2 DLL по-прежнему заблокированы. Это также препятствует обновлению моего приложения. Предполагается, что Inno Setup обнаруживает заблокированные файлы и предлагает закрыть приложения, которые их блокируют, но этот механизм, похоже, не работает ... Кроме того, флаг
uninsrestartdelete
бесполезен, так как это заставляет Inno Setup удалять файлы только после перезагрузка, но я не хочу заставлять пользователя перезагружать машину на случай, если он обновит приложение.
Что я должен сделать? Единственный выход, который я вижу, это делать все самому, а не полагаться на флаг [Files]
и regserver
. В частности, для удаления требуется сначала отменить регистрацию DLL, затем принудительно перезапустить explorer.exe, а затем фактически удалить файлы и папки. Я бы сделал это в CurUninstallStepChanged
в блоке if CurUninstallStep = usUninstall
. И чтобы перезапустить explorer.exe, я бы изменил CurStepChanged
в блоке if (CurStep = ssDone)
.
CurStepChanged -> ssInstall
, чтобы сначала вызвать деинсталлятор (чтобы получить чистый лист), explorer.exe не запустится Inno Setup после завершения установки. - person MShekow   schedule 25.09.2020taskkill
иstart explorer.exe
был ненадежным. - person MShekow   schedule 25.09.2020