MSI register dll - самооценка считается вредной - программирование

MSI register dll - самооценка считается вредной

У меня есть приложение .NET winform, которое требует регистрации собственной DLL во время установки. Мой вопрос в том, как я могу зарегистрировать dll (regsvr32 ABC.dll) как часть процесса установки MSI? Similary Как я могу отменить регистрацию dll как часть процесса установки?

4b9b3361

Ответ 1

vsdrfCOMSelfReg - не лучшая практика. Вместо этого попробуйте vsdrfCOM. Это будет "извлекать" (или попробовать, vdproj - это POS иногда) метаданные COM из библиотеки DLL и записывать их в правильные COM-таблицы. Это лучше, чем надеяться на то, что вызов процесса DllRegisterServer будет работать во время установки.

Теперь, когда MSI изначально знает ваши ресурсы COM, он будет обрабатывать установку и удаление для вас.

Ответ 2

  Хороший ответ от Chris Painter, добавив для справки: как правильно зарегистрировать DLL в wix 3.9. И еще один с WiX-focus: Регистрация COM EXE с помощью WIX.


Самостоятельная регистрация считается вредной

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

В этой статье MSA SDK перечислены несколько вариантов общих проблем с самостоятельной регистрацией, описанных ниже, а также описаны некоторые дополнительные подробности, особенно в отношении регистрации COM-данных на пользователя и сценариев запуска из источника.

Извлеченные COM-данные обеспечат надежную установку вашего COM-сервера, а также поддержку расширенных функций MSI, таких как "реклама", "откат", устойчивость и "повышенные привилегии elevated privileges". Вы можете прочитать больше об этих расширенных преимуществах MSI в этом кратком обзоре, который стал несколько популярным на serverfault.com: корпоративные преимущества MSI.

Также можно использовать встроенную таблицу SelfReg в установщике Windows, чтобы зарегистрировать файл, используя regsvr32.exe как часть процесса установки (или даже вызывать как пользовательское действие), но это считается плохой практикой по ряду причин:

  • Откат: установщик Windows не может правильно обработать откат, если данные COM не извлечены и не встроены в MSI. Результатом является то, что неудачная установка не может правильно очистить свою зону обслуживания COM, и MSI не вернет аппарат в исходное состояние должным образом. Откат COM-данных действительно работает как "автоматическое отслеживание" отслеживания каждого изменения в реестре, будь то добавление, изменение или удаление, и является надежным, когда все сделано правильно.
  • Безопасность. Процесс самостоятельной регистрации COM-сервера может в некоторых случаях выполнять неортодоксальные задачи, такие как изменение сетевых настроек системы или другие сумасшедшие маневры, которые не имеют ничего общего с COM и которые трудно идентифицировать и отладить. Я лично видел, в недоумении, я мог бы добавить, что регистрация COM изменяет сетевые настройки системы без какого-либо предупреждения и без видимой причины. Это могло бы быть просто оптимизацией для приложения, но это редко бывает приемлемо, когда оно изменяет всю систему, затрагивая все остальное программное обеспечение. Хотя EXE файл, запущенный в режиме администратора, может делать то же самое и быть одинаково неисправным, саморегистрация может оказаться незаметной и менее очевидной в качестве проблемы безопасности. Это основная причина, по которой крупные корпорации и лучшие практики Microsoft настаивают на том, чтобы не разрешать самостоятельную регистрацию, поскольку это может помешать критически важным системам бизнеса.
  • Связанные зависимости: для успешной регистрации некоторые COM файлы должны быть зарегистрированы в определенном порядке в системе. Другими словами, файл B не может быть зарегистрирован, пока файл A не будет зарегистрирован. Честно говоря, я никогда не видел этого в реальной жизни, но это технически возможно, и я видел зависимости от языковых библиотек (ресурс только библиотек), вызывающих сбой извлечения COM. Хотя это немного отличается, это все еще проблема зависимости. MSI не позволяет указывать порядок регистрации (вероятно, из-за происхождения базы данных MSI, строки неупорядочены). Если вы правильно извлечете данные реестра на компьютере сборки и поместите их в MSI, эти связанные цепочки не вызовут ошибку приложения.
  • Проблемы с правами доступа: установщик Windows имеет расширенные функции, позволяющие повысить уровень привилегий пользователя, устанавливающего MSI, чтобы разрешить регистрацию всей информации без проблем с разрешениями (не возиться с временными правами администратора). Если вы используете таблицу SelfReg, вы с большей вероятностью столкнетесь с проблемами при регистрации, вызванными особенностями разрешений или привилегий в локальной системе (по моему опыту это особенно очевидно для операций самовосстановления). Подобные проблемы с разрешениями возникают все чаще и чаще, поскольку новые версии Windows постоянно создают новые препятствия для успешного развертывания программного обеспечения (запросы UAC, блокировка самовосстановления, изменения олицетворения и т.д.).
  • Отказоустойчивость. Если другое приложение уничтожает записи реестра COM, COM-данные, встроенные в MSI, переустанавливают компонент COM со всеми связанными записями реестра путем самостоятельного восстановления, если для создания пакета используется правильное извлечение COM. Это означает, что ваше приложение всегда должно запускаться с должным образом зарегистрированными COM-серверами. Однако это также может вызвать страшную повторяющуюся последовательность циклов самовосстановления, которую видели многие опытные пользователи компьютеров (здесь более простое и короткое объяснение). Другими словами, извлечение COM также может быть пронизано проблемами, но простое использование саморегистрации может привести к поломке вашего приложения, а также склонности к ошибкам безопасности, вызываемым при выполнении восстановления, изменения или самовосстановления ваш продукт (операция самостоятельной регистрации может выполняться без повышенных прав и, следовательно, не может быть завершена, если восстановление выполняется с правами пользователя с ограниченными правами). Это означает, что ошибки невозможно исправить для большинства обычных пользователей. Это все, что они умеют делать, если продукт не работает.
  • Реклама: рекламируемые продукты доступны пользователю с помощью ярлыков и записей реестра, но в настоящее время не установлены на компьютере. Установка "по требованию" может быть вызвана несколькими способами - называемыми объявленными точками входа (рекомендуемая статья Symantec), одним из которых является вызов объявленного COM-сервера. Установка не будет инициирована, если файл не будет должным образом объявлен в реестре, а критический триггер "самовосстановления" отсутствует, если вы используете саморегистрацию.

Поддержка инструмента установки для регистрации COM

Извлечение данных COM и ввод в таблицы MSI - довольно сложная задача, и большинство инструментов на рынке, таких как Installshield, Расширенный установщик и Wise (к сожалению, Wise сейчас не в продаже) для этого есть автоматизированные решения.

В Installshield вы просто активируете флаг компонента под названием "Извлечение COM-данных при сборке", а Wise имеет аналогичный флаг на уровне компонентов. WiX может извлекать данные реестра COM с помощью инструмента heat.exe, и сгенерированный WiX-код можно вставить в исходный файл WiX (к этому моменту могут появиться новые функции) что я не в курсе). Мне не известны какие-либо функции в Visual Studio, которые будут автоматически извлекать данные COM, но похоже, что Крис Пейнтер предоставляет такую возможность в своем ответе.

Посмотрите RegSpy2, если Heat у вас не работает (Фил Уилсон - автор "Полного руководства для установщика Windows" написал RegSpy, а кто-то расширил его до RegSpy2). Также проверьте это: Зарегистрируйте exe-сервер ActiveX с помощью WiX (мой ответ к основанию для использования командной строки regspy.exe).

Ошибочные данные COM, вставленные в MSI - особенно для переупакованных приложений в корпоративных средах - являются одной из основных причин "неожиданного циклического самовосстановления". Подробную информацию об этой проблеме см. в этой длинной статье: Как определить причину повторного самовосстановления установщика Windows? (пункт 3 в разделе "Некоторые типичные сценарии проблем самовосстановления" описывает эту проблему).

Существует несколько других инструментов установки с похожими функциями извлечения: Какой установочный продукт использовать? InstallShield, WiX, Wise, Advanced Installer и т.д.

Ответ 4

Выберите файл, который хотите зарегистрировать, и в окне "Свойства" установите поле "Регистр" в vsdrfCOMSelfReg. Это создаст запись в таблице SelfReg, которая автоматически регистрирует/отменяет регистрацию вашей DLL.

http://msdn.microsoft.com/en-us/library/aa371608(VS.85).aspx