0

msxml 6 を必要とするソフトウェア用の WiX インストーラーを作成しています。正しく理解している場合、msxml 6 は XP SP3 以降の Windows に同梱されていますが、当社のソフトウェアは XP のすべてのバージョンをサポートしているため、顧客が持っていないというリスクがあると思います。 msxml 6 がインストールされています。したがって、msx​​ml 6 がまだインストールされていない場合は、インストーラーによってインストールされることを希望します。

msxml 6 がコンピューターにインストールされているかどうかを検出する方法を示すこのページを見つけましたが、どのバージョン (SP1、SP2 など) がインストールされているかはわかりません。

私の質問は、msxml 6 がインストールされているかどうかを適切に検出し、検出されない場合は最新バージョンをインストールする方法です。

これは、検出を実行するために現在使用しているものです (上記のリンクで見つけたものと、他の前提条件に使用するものを組み合わせたものです)。

<!-- MSXML6 SP1 (x86) -->
<util:RegistrySearch Root="HKCR" Key="Msxml2.DOMDocument.6.0" Format="raw"
  Variable="MsXml6x86Installed" />

<PackageGroup Id="MsXml6x86">
  <MsiPackage Id="MsXml6x86" Cache="no" Compressed="yes" Permanent="yes" Vital="yes"
    SourceFile="$(var.PrerequisitesPackagesRootPath)\msxml6_SP1_x86\msxml6_x86.msi"
    InstallCondition="(VersionNT &lt; v6.0) AND (NOT MsXml6x86Installed)" />
</PackageGroup>

<!-- MSXML6 SP1 (x64) -->
<util:RegistrySearch Root="HKCR" Key="Msxml2.DOMDocument.6.0" Format="raw"
  Variable="MsXml6x64Installed" Win64="yes" />

<PackageGroup Id="MsXml6x64">
  <MsiPackage Id="MsXml6x64" Cache="no" Compressed="yes" Permanent="yes" Vital="yes"
    SourceFile="$(var.PrerequisitesPackagesRootPath)\msxml6_SP1_x64\msxml6_x64.msi"
    InstallCondition="(VersionNT64 &lt; v6.0) AND (NOT MsXml6x64Installed)" />
</PackageGroup>

そして私のバンドル(x86)では:

<Bundle>
  ...
  <Chain>
    <PackageGroupRef Id="MsXml6x86"/>
    <PackageGroupRef Id="Vc2010Sp1x86" />
    <PackageGroupRef Id="Netfx35Sp1" />
    <PackageGroupRef Id="Netfx4Full" />
    ...
  </Chain>
</Bundle>

インストーラーを起動すると、ログ ファイルに次の出力が表示されます。

[21E4:3F00][2015-02-11T09:57:31]i000: Setting string variable 'MsXml6x86Installed' to value 'XML DOM Document 6.0'
[21E4:3F00][2015-02-11T09:57:31]i101: Detected package: MsXml6x86, state: Absent, cached: None

したがって、検索したレジストリ キーは見つかりましたが、msxml 6 が存在することを示唆していますが、実際のパッケージは存在しません。その理由は、msxml6.dll を検索すると、インストーラーで使用している msxml パッケージが SP1 用であるのに、Win 7 コンピューターに SP3 がインストールされているように見えるからだと思います。しかし、これは私が何をすべきかわからないところです。Win 7 テスト コンピューターには msxml 6 SP3 が既定でインストールされ、Win XP SP3 テスト コンピューターには既定で msxml 6 SP2 がインストールされています。XP 以降のすべてのバージョンの Windows のソリューションを取得するには、インストーラーでどの msxml パッケージを使用すればよいですか? Microsoft の Web サイトから SP3 または SP2 へのダウンロード リンクが見つかりません。

助けていただければ幸いです。

4

1 に答える 1

1

あなたがリンクしたページは非常によく考えられているとは思わない。(一般的に)する必要があることは、特定の前提条件のフットプリントを観察し、それを検出する方法を最大限に選択することです。MSXML6の場合、ORCAを使用してMSIを編集し、レジストリテーブルで以下を見つけました。

SOFTWARE\Microsoft\MSXML 6.0 パーサーおよび SDK\CurrentVersion PatchLevel = 6.00.3883.8

そのMSIのさまざまなspレベルを見つけて、トレンドが見つかるかどうかを確認し、それをロジックで使用します。

それ以外の場合は、XP SP3 のビジネス/エンジニアリング要件をアプリケーションに適用することは、非常に健全で合理的​​なアプローチです。お客様がレガシー OS を実行する場合は、少なくとも最新の SP を使用する必要があります。Microsoft は Windows Update の XP を廃止しました。この OS のサポートを終了するための非常に強固な基盤が整っています。その結果、開発とテストのコストが削減された、よりシンプルで信頼性の高いインストーラーが実現します。

于 2015-02-11T14:08:04.033 に答える