Вопрос

Я пытался определить наилучшее решение для регистрации 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 - это всего лишь инструмент для пользовательского интерфейса, а не тот, который я могу запустить на своей сборочной машине.

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

<Ол>
  • Создать новый проект .NET
  • Добавьте ссылку на проект для кандидата в dll COM или OOP, чьи wxs вы хотите собрать
  • Поиск файла Interop.candidate.dll (в папке obj\debug)
  • Запустите инструмент WiX Heat на только что найденном взаимодействии.
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top