Диагностика самовосстановления MSI

Приложение, над которым я работаю, написано в основном на VB6.

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

Обычно это происходит каждый раз, когда они запускают приложение.

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

AutoDesk действительно имеет некоторую информацию об этом:

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

2 ответа

Ваш установщик работает с каталогом, файлом или разделом реестра, который, как знает установщик Windows, является частью установки AutoCad.

Во-первых, я бы включил глобальную регистрацию Windows Installer. Это означает, что любое действие установщика Windows, включая установщик AutoCad, записывается во внешний файл журнала (в%temp%).

Затем запустите ваш установщик и дайте ему запустить установщик AutoCad.

Теперь перейдите к% temp%, и вы должны найти файлы MSIXXXX.LOG - один для вашего установщика, другой для AutoCad. Откройте их, и вы сможете пройтись по ним и определить, какой файл или раздел реестра не найден или изменен в AutoCad MSI.

Вы можете найти WiLogUtl.exe полезным для этого:

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

Если нет, вам придется посмотреть на что-то вроде RegFree COM, чтобы переместить файлы из общих каталогов в личный каталог и уменьшить конфликты реестра. Кроме того, если вы используете (потребляете) MSM времени выполнения Visual C++ для создания своего MSI, рассмотрите возможность использования установщика Microsoft EXE вместо этого или (что лучше всего) размещения DLL непосредственно в папке вашей программы, поскольку я обнаружил, что MSM может вызвать именно такую ​​проблему.

Что касается комментария Питера Купера-младшего по поводу VB6, вызывающего самовосстановление. Пожалуйста, ознакомьтесь с документацией heat.exe для Wix. Вы увидите, что есть специальный переключатель, который поддерживает инструмент, для подавления извлечения определенных значений реестра, которые принадлежат самой среде выполнения VB6 (и, следовательно, не должны быть испорчены или обновлены любым другим MSI): http://wixtoolset.org/documentation/manual/v3/overview/heat.html

Спуститесь по списку до ключа -svb6 и прочитайте описание справа. (Воспроизведено здесь:)

При регистрации компонента COM, созданного в VB6, он добавляет записи реестра, которые являются частью компонента среды выполнения VB6:

  • CLSID {D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731}
  • Typelib {EA544A21-C82D-11D1-A3E4-00A0C90AEA82}
  • Typelib {000204EF-0000-0000-C000-000000000046}

[а также] Любые интерфейсы, которые ссылаются на эти две библиотеки типов

Ваш установщик пишет в эти ключи? Если это так, попробуйте исключить их - это хорошо сделать, даже если это не виновник в данном конкретном случае.

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

Другие вопросы по тегам