regsvr32 и установщик Windows - PullRequest
0 голосов
/ 24 марта 2010

Мой проект использует несколько DLL-файлов с элементами управления ActiveX.

Сейчас я делаю проект развертывания (установщик Windows).

Мне нужно зарегистрировать dll через установщик Windows, используя regsvr32. Как я должен это делать ? И можно ли определить, произошел сбой regsvr32 или нет?

Ответы [ 3 ]

9 голосов
/ 24 марта 2010

Я полагаю, когда вы говорите, что создаете проект развертывания, вы говорите о неприятной части работы, которая доступна в Visual Studio?

Если это так, для каждой DLL вы можете просмотреть их свойства и установить для свойства «Register» значение COM.

Если вы используете какую-либо другую технологию развертывания (например, Wix, InstallShield и т. Д.), То ответ будет разным, но большинство из них имеют простую настройку, чтобы сказать «это COM dll, который должен быть зарегистрирован» вместо того, чтобы запускать regsvr32.

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

2 голосов
/ 10 февраля 2013

Лучший способ использовать regsvr32 для регистрации COM-интерфейса во время установки - нет. (Оскал)

Вызов regsvr32 и другие формы «самостоятельной регистрации» во время установки с использованием установщика Windows - это плохая практика. COM-интерфейсы часто используются несколькими продуктами. Если пакет A регистрирует интерфейс COM IFoo, то пакет B (повторно) регистрирует тот же интерфейс, а затем, если какой-либо пакет удаляется и отменяет регистрацию IFoo, он ломает оставшийся пакет.

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

В WiX инструмент heat используется для «сбора» COM-интерфейсов (среди прочих данных) в исходные фрагменты WiX, содержащие необходимые записи реестра. Installshield имеет флаг «COM extract at build», который делает то же самое для проектов MSI и Installscript-MSI. Другие наборы инструментов установщика Windows имеют аналогичные возможности.


Примечание. Установщик Windows (MSI) - это базовый API управления установкой, который является частью самой Windows. Вам нужны дополнительные инструменты для генерации .msi пакетов, которые используют этот API.

Windows Installer XML (WiX) - это схема XML для описания пакетов установки на основе MSI вместе с инструментами для создания фактического пакета .msi из документов в этой схеме. Installshield - это еще один инструмент, который может генерировать пакеты .msi.

Это те два, которые я использовал. Есть и другие инструменты, такие как InstallAware и Advanced Installer. Я не могу говорить с их способностями, никогда не использовал их сам. Visual Studio также имеет плагин для генерации инсталляционных пакетов, но, по моему опыту, он плохо масштабируется для продуктов промышленного уровня.

1 голос
/ 24 марта 2010

Вы должны исследовать WiX Это проект с открытым исходным кодом от MS, который создает установщики Windows (.msi). Существует инструмент с таким названием, который называется heat, который генерирует код на разных входах, одним из которых является dll-регистры. и т. д. Среда установки позаботится о том, произошла ли правильная регистрация

...