Переключатель RegServer : COM-файлы обычно регистрируются через переключатель /RegServer
как:
MyBinary.exe /RegServer
Другими словами, файлы EXE не регистрируются с помощью обычного механизма regsvr32.exe
.Это инструмент, используемый для регистрации файлов COM DLL и OCX, но он не обрабатывает файлы EXE.Также имеется переключатель /UnRegServer
для отмены регистрации файлов EXE COM - для исполняемых файлов, которые поддерживают /RegServer
(which is not all COM EXE files - it could be missing as a feature
).
Самостоятельная регистрация : Самостоятельная регистрация не идеальна для регистрации COM-файлов, и вот описание того, почему это так: MSIрегистрация dll - самостоятельная регистрация считается вредной .В MSI извлекаются данные реестра COM и заполняется ряд специальных таблиц COM, позволяющих регистрировать сервер COM таким образом, который поддерживает расширенные функции, такие как откат.Мне также не нравится извлечение COM ( риск проблем с самовосстановлением , больше проблем с самовосстановлением ), но это помогает в большинстве случаев - особенно когда есть зависимости, которыеможет вызвать проблемы с регистрацией.Более того, именно так COM-файлы должны регистрироваться в MSI.Это стандарт.Следует отметить, что некоторые параметры COM все еще входят в таблицу Registry - поскольку для них нет выделенных таблиц, связанных с COM.
heat.exe : WiX's ownheat.exe
Утилита теперь может извлекать COM-данные из dll-файлов и ocx-файлов (32-битных).Но, похоже, он не работает для EXE COM-файлов - я не уверен, почему:
heat.exe file MyCOMDll.dll -out MyCOMDll.wxs
RegSpy2.exe : есть инструмент, который вы можете использоватьдля извлечения регистрационной информации COM из файлов DLL , OCX и EXE .Его можно скачать здесь: http://www.installsite.org/files/iswi/RegSpy2.zip. На главной странице перечислены многочисленные инструменты .RegSpy tool
написано Филом Уилсоном - экспертом MSI и автором Полного руководства по установке Windows ( APress ).
Вот как извлечь данные COM из исполняемого файла COM (если вы не получили данных, попробуйте сначала отменить регистрацию файла, а затем запустить regspy.exe
):
RegSpy.exe MyBinary.exe /RegServer >> RegistryOutput.reg
Экспортированный *.reg file
может быть преобразован в элементы WiX.Это не легкий процесс.Использование инструмента WiX heat.exe
не заполняет надлежащие таблицы COM, а помещает все в Registry table
(что будет работать, за исключением ошибок проверки MSI):
heat.exe reg MyCOMRegistryData.reg -out MyWiXFile.wxs -sfrag -suid
Раньше был инструмент под названием Tallow, который конвертировал reg-файлы в регистрацию COM WiX, но этот инструмент больше нигде не найти.Мне неизвестны какие-либо другие способы его генерации, кроме написания его самостоятельно, загрузки другого инструмента развертывания и импорта данных COM или извлечения и декомпиляции созданного MSI с помощью dark.exe
* 1096.* и удалите разметку WiX.Или выясните, как heat.exe
записывает свой вывод WiX XML с данными COM и адаптирует его для обработки вывода из RegSpy.exe.
ОБНОВЛЕНИЕ : добавление ссылки на Парафин : https://github.com/Wintellect/Paraffin. Это, предположительно, "лучший жир".Я не уверен, что он поддерживает с точки зрения COM-экстракта.Мой быстрый тест показал, что он вообще не поддерживает извлечение COM, но поддерживает автоматическую генерацию разметки WiX и добавление и удаление файлов для обновлений.
Пользовательские действия : Вы можете зарегистрировать ваш COM EXE с помощью специального действия, которое также вызывает переключатель /RegServer
, хотя это не рекомендуется по всем причинам, перечисленным в ссылке выше (Самостоятельная регистрация считается вредной ).
Некоторые ссылки :