Зарегистрируйте сервер ActiveX exe с помощью WiX

У меня есть несколько exe файлов VB6 ActiveX, которые необходимо зарегистрировать при установке до их использования.

Я попытался использовать Heat для извлечения информации, но только генерирует элемент файла.

Эти файлы можно зарегистрировать, вызвав их с помощью переключателя /regserver и отменив регистрацию, вызвав их с помощью переключателя /unregserver. Я понимаю, что это не правильный путь. Вместо этого я должен добавить ключи реестра и другие необходимые элементы в мой источник wix.

Мой вопрос заключается в том, как узнать, какие ключи реестра и другой элемент требуется для регистрации этих файлов exe ActiveX. "Видеть как жара", похоже, не удается собрать эту информацию.

Ответ 1

У меня была та же проблема с талловом из WiX 2.0, и мне пришлось внедрять реестр за пределами серверов. Вот исправленный талон. Было бы неплохо объединить класс ProcessWithInjectedDll в Heat и, вероятно, в какой-то момент сходиться к основной магистрали.

Остерегайтесь того, что в сгенерированных ключах реестра попадает много крипов из среды выполнения VB6. Сгенерированный выход неприменим без некоторой настройки. Это может быть полезно при использовании CleanupRegInclude.vbs.

И последнее, но не менее важное: абсолютные имена файлов и пути бесполезны. Вместо этого вы должны использовать #YourComponent и $YourComponent (проверьте документацию MSI).

Ответ 2

Элементы ActiveX - это только объекты COM. Минимальный размер регистрации, который вам нужно сделать, выглядит примерно так:

  <RegistryKey Root="HKCR" Action="createAndRemoveOnUninstall" Key="CLSID\{YOUR-GUID-HERE}">
    <RegistryKey Action="createAndRemoveOnUninstall" Key="InprocServer32">
      <RegistryValue Action="write" Value="[INSTALLDIR]YOUR-DLL-HERE.dll" Type="string"/>
      <RegistryValue Action="write" Name="ThreadingModel" Value="Apartment" Type="string"/>
    </RegistryKey>
  </RegistryKey>

Возможно, вы захотите зарегистрировать идентификатор Prog ID:

    <RegistryKey Action="createAndRemoveOnUninstall" Key="ProgID">
      <RegistryValue Action="write" Value="YOUR.PROGIDHERE" Type="string"/>
    </RegistryKey>

Ответ 3

как узнать, какие ключи реестра и другой элемент, который мне требуется зарегистрируйте эти EXE файлы ActiveX

В общем, вы можете обнаружить изменения реестра, как это:

  • Привести реестр в чистое состояние, например используйте myapp.exe /unregserver

  • Создайте дамп реестра содержимое, подобное этому

    c:\WINDOWS\system32\reg.exe export dump1.reg
    
  • Запустите команду, которая изменит реестр, например. myapp.exe /regserver

  • Создайте еще один dump2.reg реестр.

  • Найдите различия между dump1.reg и dump2.reg с (например, TortoiseSVN добавляет команду "diff" к контекстное меню проводника, если у вас есть два файла)

В различиях, которые вы должны игнорировать, может быть некоторый шум. Типичным примером является HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG\Seed. Этот раздел реестра используется окнами CryptoAPI для хранения непрерывно собранной энтропии. Кстати, этот ключ иногда появляется в пакетах MSI, генерируемых генераторами коммерческих установок. Это, по-видимому, указывает на то, что они используют аналогичную технику регистрации: -)

Ответ 4

Я думал, что heat.exe был обновлен, чтобы иметь возможность собирать файлы COM EXE, но я думаю, что он, возможно, еще не был реализован.

Я обычно использую инструмент с именем RegSpy/ RegSpy 2 для извлечения информации COM из файлов DCOM EXE: http://www.installsite.org/pages/en/tt_analyze.htm#RegSpy.

Использование вышеуказанного инструмента даст вам рег файл, но вам все равно нужно преобразовать его в формат WIX. Чтобы получить файл reg, выполните следующие действия:

regspy2.exe myfile.exe → myfile.reg

Я не думаю, что есть способ автоматически преобразовать файл reg в формат wxs (я помню, как писал базовый конвертер некоторое время назад, но не имею его здесь). Чтобы это было легко, вы можете извлечь информацию, необходимую с помощью Installshield или Wise для Windows Installer, построить MSI, а затем разобрать формат msi в Wix, используя dark.exe(wix decompiler). Получаемая разметка Wix затем может быть добавлена ​​в ваш проект.

Ответ 5

Я пробовал как жар, так и regspy, упомянутый @Glytzhkof, но обнаружил, что также не сделал полного извлечения всей соответствующей информации о реестре для моего COM-сервера. Однако я нашел утилиту - RegSpyUI - такие корабли с InstallShield, которые сделали прекрасную работу. Более подробно описано здесь.