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

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

4 Solutions collect form web for “MSI register dll – самооценка считается вредной”

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

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

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

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

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

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

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

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

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

Извлечение данных COM и вход в таблицы MSI является довольно сложной задачей , и большинство инструментов на рынке, таких как Installshield , Advanced Installer и мудрый (Ужасно сейчас, к сожалению, вне рынка, есть автоматические решения для этого.

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

Проверьте RegSpy2, если Heat не работает для вас ( Phil Wilson – автор «The Definitive Guide to Windows Installer» написал RegSpy, а кто-то распространил его на RegSpy2 ). Также проверьте это: зарегистрируйте сервер ActiveX exe с помощью WiX (мой ответ в нижней части для использования командной строки regspy.exe).

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

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

Прокрутите вниз до правила 19 в Дао установщика Windows здесь, чтобы узнать, что сказала команда MSI:

http://blogs.msdn.com/b/windows_installer_team/archive/2006/05/12/595950.aspx

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

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

Давайте будем гением компьютера.