У меня есть несколько 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, которые сделали прекрасную работу. Более подробно описано здесь.