Регистрация COM-сервера с помощью WiX

Я пытался определить наилучшее решение для регистрации COM-сервера с помощью WiX для создания пакета установщика Windows, и я изо всех сил.

В этом посте Deployment Engineering Archive: HOWTO: Используйте Regsvr32.exe с WIX, есть открытый запрос к "Полиции установки", чтобы расправиться с использованием regsvr32 через пользовательское действие exe. Я знаю зло использования regsvr32 как он регистрируется в системе, а не пользователя, но я также помню, что OleSelfRegister могут возникнуть проблемы из бюллетеня службы поддержки Microsoft (извините, не могу найти ссылку) - и я считаю, что они рекомендовали использовать regsvr32,

Любой совет?

5 ответов

Решение

Прочтите "Не используйте таблицы SelfReg и TypeLib" по адресу:

https://msdn.microsoft.com/en-us/library/bb204770

Для WiX взгляните на элемент Component в ссылке на схему по адресу:

http://wixtoolset.org/documentation/manual/v3/xsd/wix/component.html

Обратите внимание на некоторые дочерние элементы, такие как AppId, Class, ProgId, Registry и так далее. Правильная техника заключается в использовании COM extraction отражать регистрационную информацию и декларативно передавать ее в установщик, чтобы MSI могла позаботиться о вас, не выходя из процесса в какой-либо код (например, DllRegisterServer()), что может привести к сбою, а также не позволяет MSI получить представление о компоненте с точки зрения ремонта и рекламы.

В Wix есть инструмент "Tallow". Вы можете использовать его для автоматического создания правильных записей реестра. Затем вы просто настраиваете свою установку wix для записи этих записей. Selfreg не должен использоваться.

Как отметил @Trampster, heat.exe не справляется со сбором записей реестра с COM-серверов. Я пытался, но результаты были неполными.

Вместо этого, следуя совету в разделе Мониторинг доступа к реестру (InstallSite Tools: Monitoring), я использовал InstallShield RegSpyUI. Предположительно, он поставляется с версиями Installshield v7 и выше, включая ознакомительную версию. Эта информация может быть устаревшей; Я могу подтвердить, что он не поставляется с довольно бесполезным Installshield LE, который поставляется с 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 "

Попробуй это:

  1. Создать новый проект.NET
  2. Добавьте ссылку на проект к кандидату COM dll или OOP, чьи wxs вы хотите собрать
  3. Поиск файла Interop.candidate.dllobj\debug папка)
  4. Запустите утилиту WiX Heat на только что найденном взаимодействии DLL.

Есть только один недостаток: регистрация WiX Com с помощью heat.exe не работает для COM-серверов.exe. InstallShield и его инструменты, кажется, поддерживают его, но RegSpyUI - это просто инструмент пользовательского интерфейса, а не тот, который я могу запустить на своем компьютере сборки.

Другие вопросы по тегам