Зарегистрируйте ActiveX exe-сервер с помощью WiX - PullRequest
4 голосов
/ 29 октября 2009

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 30 октября 2009

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

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

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

2 голосов
/ 29 октября 2009

как узнать какие ключи реестра и другой элемент, который мне требуется зарегистрировать эти 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, сгенерированных генераторами коммерческих установок. Похоже, это указывает на то, что они используют похожую технику перехвата реестра:

2 голосов
/ 29 октября 2009

Элементы управления 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>
1 голос
/ 31 октября 2009

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

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

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

regspy2.exe myfile.exe >> myfile.reg

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

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

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

...