Регистрация COM-сервера с помощью WiX - PullRequest
3 голосов
/ 02 октября 2008

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

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

Любой совет?

Ответы [ 5 ]

4 голосов
/ 02 октября 2008

Прочтите «Не использовать таблицы 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 представление о компонентах с точки зрения ремонта и рекламы.

3 голосов
/ 05 ноября 2008

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

1 голос
/ 10 октября 2014

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

Вместо этого, следуя совету на Мониторинг доступа к реестру (Инструменты InstallSite: Мониторинг) , я использовал 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"

0 голосов
/ 01 марта 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...