Я обнаружил очень странную, но воспроизводимую на 100% проблему при установке 32-разрядного настраиваемого адаптера BizTalk из соответствующего 32-разрядного пакета MSI, созданного с помощью Wix v3.5 для Windows Server 2008 R2 (пакет обновления 1).
Обычно установщик работает нормально, копирует соответствующие файлы в папку Program Files (x86) и записывает соответствующие записи реестра в HKCU \ Wow6432Node \ CLSID для регистрации адаптера.
В администрировании BizTalk ServerКонсоль, при попытке добавить адаптер в папку Параметры платформы \ Адаптеры , я вызываю диалоговое окно Свойства адаптера .Там я могу успешно найти пользовательский адаптер в списке Adapter и дать ему понятное имя, но когда я пытаюсь проверить диалоговое окно, я получаю следующую ошибку:
Невозможно прочитать конфигурацию транспорта.Убедитесь, что компонент управления адаптером установлен на локальном компьютере.Не удалось прочитать значение для ключа «CLSID {7823EF8C-0D1E-4BC4-B110-2C16A0B8A63F} \ BizTalk» при чтении конфигурации транспорта из реестра.Система не может найти указанный файл.
Тем не менее, я могу подтвердить, что соответствующий раздел реестра находится там.Я вижу это с помощью редактора реестра Windows (regedit.exe), утилиты командной строки reg.exe, из командной строки x86 PowerShell, с программой на C # ... что угодно.
Теперь здесьстранная часть.
Если я экспортирую раздел реестра во временный файл .reg, затем удаляю ключ и затем повторно импортирую содержимое временного файла, дважды щелкнув его в проводнике Windows, адаптеретеперь можно успешно добавить в консоль администрирования BizTalk Server.
Я выполнил те же действия с помощью утилиты командной строки reg.exe (reg.exe / export; reg.exe / delete; reg.exe /import) с тем же эффектом.
Что я могу сделать не так?
Файл моего проекта WiX создан так, чтобы иметь возможность ориентироваться как на 32-битные, так и на 64-битные платформы из одного файла проекта (хотя и с двумя последовательными компиляциями).Вот соответствующая часть сценария, для иллюстративных целей:
<!-- Platform-specific variables -->
<?if $(var.Platform) = x64 ?>
<?define Win64 = "yes" ?>
<?define ProductDisplayName = "$(var.ProductName) $(var.ProductVersion) (x64)" ?>
<?define ProductId = "791dc40e-6536-47db-8046-2c819562d819" ?>
<?define ProductUpgradeCode = "7a9af2a5-4f90-43fe-94cc-faeafb1bc2ef" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define Win64 = "no" ?>
<?define ProductDisplayName = "$(var.ProductName) $(var.ProductVersion)" ?>
<?define ProductId = "3e6b25ab-5ab8-46ff-9ad8-fa2b1d387a31" ?>
<?define ProductUpgradeCode = "da1ab3c5-64d5-4827-9287-4d3939fe51b1" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>
<!-- Windows Installer package -->
<Product Id="$(var.ProductId)"
Name="$(var.ProductDisplayName)"
Language="1033"
Version="$(var.ProductFullVersion)"
Manufacturer="BizTalkFactory.AdapterPack.Setup"
UpgradeCode="$(var.ProductUpgradeCode)"
>
<Package InstallerVersion="200" Compressed="yes" Platform="$(var.Platform)" />
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
<!-- Internal components here -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Id="INSTALLLOCATION" Name="$(var.ProductName) $(var.ProductVersion)">
<!-- Microsoft BizTalk Base Adapter Framework -->
<Component Id="Component.Microsoft.Samples.BizTalk.Adapter.Common" Guid="6803e9aa-4e8a-4b90-b96b-9c9eb482a415" Win64="$(var.Win64)">
<File Id="File.Microsoft.Samples.BizTalk.Adapter.Common.dll"
Name="Microsoft.Samples.BizTalk.Adapter.Common.dll"
Source="$(var.SolutionDir)References\Microsoft.Samples.BizTalk.Adapter.Common.dll"
KeyPath="yes"
/>
</Component>
<!-- BizTalk Custom Adapter -->
...
<!-- Custom BizTalk Adapter registration -->
<Component Id="Component.CustomAdapterManagement.Registry" Guid="bcf232d5-7ab2-4905-a59a-89a72f94ffd5" Win64="$(var.Win64)">
<RegistryKey Root="HKCR" Key="CLSID\{7823EF8C-0D1E-4BC4-B110-2C16A0B8A63F}" Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Value="Name of the Custom BizTalk Adapter" />
<RegistryKey Key="Implemented Categories\{7F46FC3E-3C2C-405B-A47F-8D17942BA8F9}" Action="createAndRemoveOnUninstall" />
<RegistryKey Key="BizTalk" Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Value="BizTalk" />
<!-- other registry values here -->
</RegistryKey>
</RegistryKey>
</Component>
</Directory>
</Directory>
</Directory>
<!-- Features -->
<Feature Id="F_0CA4329B_BA7F_462E_91EB_EEEA6FF7525E" Title="Custom Adapter" Level="1" TypicalDefault="install" InstallDefault="local" AllowAdvertise="no" Absent="allow">
<ComponentRef Id="Component.Microsoft.Samples.BizTalk.Adapter.Common" />
<ComponentRef Id="Component.CustomAdapter" />
<ComponentRef Id="Component.CustomAdapterManagement" />
<ComponentRef Id="Component.CustomAdapterManagement.Registry" />
</Feature>
Я полностью схожу с ума по этому!