Регистрация COM-сервера с помощью WiX
Я пытался определить наилучшее решение для регистрации COM-сервера с помощью WiX для создания пакета установщика Windows и боюсь.
В этом сообщении Архив разработки развертывания: HOWTO: используйте Regsvr32.exe с WIX, есть открытый запрос для "Политики установки", чтобы взломать использование regsvr32 с помощью пользовательского действия exe. Я знаю, что зло использует regsvr32
, поскольку он регистрируется системой, а не пользователем, но я также помню, что OleSelfRegister
может иметь проблемы из бюллетеня поддержки Microsoft (извините, не могу найти ссылку) - и я верю они рекомендуют использовать regsvr32
.
Любые советы?
Ответы
Ответ 1
Прочитайте "Не используйте таблицы 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 представление о следе компонента с точки зрения ремонта и рекламы.
Ответ 2
В Wix есть инструмент "Tallow". Вы можете использовать его для автоматического создания записей реестра. Затем вы просто настраиваете свою установку wix для записи этих записей. Selfreg не следует использовать.
Ответ 3
Как отметил @Trampster, heat.exe не справляется с сбором записей в реестре с серверов COM. Я попытался, но результаты были неполными.
Вместо этого, следуя рекомендациям "Мониторинг доступа к реестру" (инструменты InstallSite: мониторинг), я использовал InstallShield RegSpyUI. Это предположительно поставляется с версиями Installshield v7 и выше, включая оценочную версию. Эта информация может быть устаревшей; Я могу подтвердить, что он не поставляется с довольно бесполезным Installshield LE, который поставляется с VS2013.
К счастью, у меня была копия InstallShield 2010, и это произошло с RegSpyUI.
В любом случае, RegSpyUI был просто необходим: укажите его на COM.exe, извлеките информацию реестра в файл .reg. Затем используйте тепло, чтобы собрать его в файл .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 @для... "[MYPRODUCT]\COMFOO.exe
"