Обновите расширение оболочки проводника Windows с помощью Inno Setup

У меня есть программный продукт, который дополнительно устанавливает расширение оболочки для проводника Windows. Он сделан на C # и использует .NET Framework v4.0. Расширение оболочки устанавливается программой Inno Setup во время установки с помощью regasm.exe. Все работает нормально, пока я не захочу установить обновленную версию приложения. Проблема в том, что я не могу обновить dll расширения оболочки, потому что она загружена в память проводника. Перед установкой Inno Setup показывает мне следующее сообщение

введите описание изображения здесь

В нем говорится, что установщику необходимо завершить работу проводника Windows, поскольку он использует файлы, которые должны быть обновлены установщиком. Он завершает процесс проводника, но не запускает его снова. Это моя первая проблема.

На самом деле я не хочу принудительно закрывать проводник пользователя. Но я не знаю, как выгрузить управляемую dll оболочки из памяти проводника. Если удалить его с помощью regasm.exe, dll все равно останется в памяти. На самом деле я даже не могу найти место, где происходит эта проверка, потому что я получил уже готовые исходники установки.

Надстройка Files-In-Use (IssProc.dll) для Inno Setup не помогает, потому что как только я завершаю работу с проводником Windows с помощью этой надстройки, проводник немедленно перезагружается.

Как я мог решить эту проблему? Как я могу обновить dll расширения оболочки для лучшего взаимодействия с пользователем? И, может быть, кто-нибудь подскажет, где находится тот код, который проверяет используемые файлы?

O и BTW Я использую Windows 7 x64.


person Nazar Grynko    schedule 20.07.2012    source источник
comment
С помощью , может быть, кто-нибудь может мне подсказать, где находится этот код, который проверяет наличие используемых файлов, вы имели в виду в исходном коде InnoSetup? Или вы хотели показать пример сценария использования решения?   -  person TLama    schedule 21.07.2012
comment
Я имел ввиду в исходном коде Inno Setup. Не могу найти ничего похожего на указанную выше проверку файлов. У нас есть только проверка .NET v4 в Inno Setup. Вероятно, эта проверка сделана движком Inno Setup?   -  person Nazar Grynko    schedule 21.07.2012
comment
Я вижу эту проверку, выполненную мастером установки   -  person Nazar Grynko    schedule 21.07.2012
comment
Это Wizard.pas, функция TWizardForm.QueryRestartManager.   -  person TLama    schedule 21.07.2012


Ответы (2)


Используйте флажок restartreplace при входе в файл. Из справки:

Когда существующий файл необходимо заменить, и он используется (заблокирован) другим запущенным процессом, программа установки по умолчанию отображает сообщение об ошибке. Этот флаг указывает программе установки вместо этого зарегистрировать файл, который будет заменен при следующем перезапуске системы (путем вызова MoveFileEx или создания записи в WININIT.INI). В этом случае пользователю будет предложено перезагрузить компьютер в конце процесса установки.

Таким образом, использование этого флага не приведет к тому, что мастер попросит завершить приложения, использующие файл, но запланирует обновление файла до следующей перезагрузки и предложит пользователю перезагрузить компьютер в конце установки, что, на мой взгляд, довольно удобно для пользователя и обычно используется .

person TLama    schedule 20.07.2012
comment
Спасибо. Работает как швейцарские часы. - person Nazar Grynko; 21.07.2012
comment
IIRC, он все равно выдаст приглашение RestartManager, но затем продолжит замену при перезапуске, если он все еще используется. Вам нужно будет настроить фильтр для этого. - person Deanna; 22.07.2012

Чтобы отключить подсказку, вы должны просто установить «CloseApplications = no» в [Setup]. Но вам все равно нужно использовать флаг перезапуска в [Файл], если вы уверены, что замена необходима, но позже.

person Bingley    schedule 15.12.2014
comment
По сути, это будет то же самое, что и restartreplace. - person TLama; 15.12.2014
comment
Я надеялся, что это так, поэтому я могу решить ту же проблему этим способом напрямую, но, к сожалению, они не были в моем тесте. Мне пришлось потратить больше часов, чтобы попробовать еще раз. :( Я сделал это с помощью последней установки Inno 5.5.5 (a). - person Bingley; 16.12.2014