0

Windows Server 2008 R2 (Service Pack 1) 上の Wix v3.5 で作成された対応する 32 ビット .MSI パッケージから 32 ビットのカスタム BizTalk アダプターをインストールすると、非常に奇妙ですが 100% 再現可能な問題が見つかりました。

基本的に、インストーラーは正常に動作し、適切なファイルを Program Files (x86) フォルダーにコピーし、対応するレジストリ エントリを HKCU\Wow6432Node\CLSID の下に書き込み、アダプターを登録します。

BizTalk Server 管理コンソールで、Platform Settings\Adaptersフォルダーの下にアダプターを追加しようとすると、[アダプターのプロパティ] ダイアログ ボックスが表示されます。そこで、アダプターリストでカスタム アダプターを見つけてわかりやすい名前を付けることができますが、ダイアログ ボックスを検証しようとすると、次のエラーが表示されます。

トランスポート構成を読み取れません。アダプタ管理コンポーネントがローカル マシンにインストールされているかどうかを確認します。レジストリからトランスポート構成を読み取っているときに、"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 ビットの両方のプラットフォームをターゲットにできるように作成されています (ただし、2 つの連続したコンパイルがあります)。説明のために、スクリプトの適切な部分を次に示します。

<!-- 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>

私はこれについて完全に私の心を失っています!

4

1 に答える 1

1

別のカスタムアダプターでも同じ状況を再現できました。そして、レジストリと同じトリックも私にとってはうまくいきました。理由はわかったと思います。レジストリ キーのアクセス許可は、アダプターのインストール方法によって異なります。「Just me」でインストールしたところ、同じエラー メッセージが表示されました。「Everyone」にインストールしたところ、期待通りにアダプタを追加できました。どちらの場合もレジストリ キーを右クリックすると、アクセス許可の違いがわかります。

于 2012-07-05T13:06:15.753 に答える