Регистрация 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"