Зарегистрируйте ActiveX exe-сервер, используя WiX

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

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

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

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

5 ответов

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

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

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

Как я узнаю, какие ключи реестра и другие элементы мне нужны для регистрации этих exe-файлов ActiveX

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

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

  2. Создайте дамп содержимого реестра, как это

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

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

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

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

Элементы управления 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>

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

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

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

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

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

regspy2.exe myfile.exe >> myfile.reg

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

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

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