Регистрация COM-сервера в WiX
-
03-07-2019 - |
Вопрос
Я пытался определить наилучшее решение для регистрации COM-сервера с использованием WiX для создания установочного пакета Windows и испытываю трудности.
В этом посте Инженерный архив развертывания:КАК ЭТО СДЕЛАТЬ:Использование Regsvr32.exe с WIX, существует открытый запрос к "Полиции настройки" на пресечение использования regsvr32 с помощью пользовательского действия exe.Я знаю, какое зло таит в себе использование regsvr32
поскольку он регистрируется в системе, а не у пользователя, но я также помню, что OleSelfRegister
могут возникнуть проблемы из бюллетеня службы поддержки Microsoft (извините, не могу найти ссылку) - и я полагаю, что они рекомендовали использовать regsvr32
.
Есть какой-нибудь совет?
Решение
Читать " не использовать таблицы SelfReg и TypeLib " по адресу:
https://msdn.microsoft.com/en-us/library / bb204770 # no_selfreg
Для WiX, посмотрите на элемент Component в ссылке на схему по адресу:
http://wixtoolset.org/documentation/manual/v3 /xsd/wix/component.html р>
Обратите внимание на некоторые дочерние элементы, такие как AppId , Class , ProgId , Registry и так далее. Надлежащий метод заключается в использовании COM extraction
для отображения регистрационной информации и декларативного ее передачи в установщик, чтобы MSI могла позаботиться о вас, не выходя из процесса, в некоторый код (например, DllRegisterServer()
), который может дать сбой, а также нет. предоставляет MSI представление о компонентах с точки зрения ремонта и рекламы.
Другие советы
Существует инструмент " Tallow " включен с Wix. Вы можете использовать его для автоматического создания правильных записей реестра. Затем вы просто настраиваете свою установку wix для записи этих записей. Selfreg не должен использоваться.
Как указал @Trampster, heat.exe не очень хорошо выполняет сбор записей реестра с COM-серверов.Я пытался, но результаты были неполными.
Вместо этого, следуя совету, приведенному в Мониторинг обращений к реестру (Инструменты сайта установки:Мониторинг), Я использовал InstallShield RegSpyUI.Предположительно, это поставляется с версиями Installshield v7 и выше, включая ознакомительную версию.Эта информация может быть устаревшей;Я могу подтвердить, что это так нет поставляется с практически бесполезным файлом Installshield, который поставляется с VS2013.
К счастью, у меня была копия InstallShield 2010, и она поставлялась с RegSpyUI.
В любом случае, использовать RegSpyUI было несложно:наведите его на COM .exe, извлеките информацию реестра в reg-файл.Затем используйте heat, чтобы собрать это в файл .wxs, который вы можете добавить в свой проект Wix
heat reg <some.reg> -gg -o <some.wxs>
Тогда это просто вопрос изменения любых жестко закодированных путей, которые указывают на местоположение COM .exe, чтобы они отражали предполагаемую папку установки.
например ,если файл .wxs, созданный RegSpyUI + heat, содержит что-то вроде этого
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
<RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
<RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
</RegistryKey>
</Component>
</DirectoryRef>
</Fragment>
и вы устанавливаете в свой основной файл wix, чтобы
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="COMPANY" Name="My Company">
<!--This is the actual installation folder-->
<Directory Name="MyProduct" Id="MYPRODUCT">
затем просто отредактируйте путь RegistryValue@value на ..."[MYPRODUCT]\COMFOO.exe
"
Есть только один недостаток: регистрация WiX Com с помощью heat.exe не работает для COM-серверов .exe. InstallShield и его инструменты, кажется, поддерживают его, но RegSpyUI - это всего лишь инструмент для пользовательского интерфейса, а не тот, который я могу запустить на своей сборочной машине.
Попробуйте это:
<Ол>Interop.candidate.dll
(в папке obj\debug
)