MSI InstallValidate FilesInUse чрезмерно активен при расширении оболочки? - PullRequest
1 голос
/ 02 ноября 2010

Я использую Advanced Installer (MSI) , чтобы установить DLL расширения оболочки для контекстного меню проводника. Это работает за исключением удаления пользовательского действия в InstallExecuteSequence. Мне пришлось добавить команду в regsvr32.exe / s / u для отмены регистрации библиотеки DLL.

Проблема, с которой я столкнулся, заключается в том, что при последующих переустановках того же продукта (с другой версией продукта и кодом продукта), так что сначала происходит автоматическое удаление приложения, иногда проводник не освобождает библиотеку DLL, которая вызывает появится окно FilesInUse и предложит убрать Explorer.exe или перезагрузить компьютер.

Поскольку расширение оболочки не содержит ошибок и не нуждается в замене, а также потому, что я не обновлял его номер версии в промежутках между установками, я не хочу переустанавливать его или проверять, используется ли оно, если его версия измененное.

Я попытался добавить Поиск файла в MSI в [APPDIR], но все, что возвращается, это "C: \", хотя файл на самом деле находится где-то еще в папке appdir

Существует ли простой способ пропустить переустановку файла, если он уже существует, и пропустить InstallValidate для FilesInUse?

1 Ответ

1 голос
/ 31 октября 2011

Вы можете попытаться установить условие для своего настраиваемого действия, чтобы учитывать состояние компонента согласно http://msdn.microsoft.com/en-us/library/windows/desktop/aa368012(v=vs.85).aspx

Поскольку вы не обновляете версию файла и не предполагаете путь к ключу его компонента, установщик Windows не долженпопытаться переустановить компонент.В этом случае условие, подобное этому, имеет большой шанс на работу: $ ComponentId = 3, где ComponentId - это идентификатор компонента, владеющего расширением оболочки.При этом условии ваш CA должен выполняться только тогда, когда компонент «ComponentId» фактически (пере) установлен.

...