WiX msxml 6 先决条件
WiX msxml 6 prerequisite
我正在为我们的软件创建一个需要 msxml 6 的 WiX 安装程序。如果我理解正确的话,msxml 6 随 Windows 从 XP SP3 开始提供,但由于我们的软件支持所有版本的 XP,我想有客户不会安装 msxml 6 的风险;因此,如果 msxml 6 尚未安装,我希望它由我们的安装程序安装。
我发现这个 page 显示了如何检测计算机上是否安装了 msxml 6,但没有说明安装了哪个版本(SP1、SP2 等)。
我的问题是如何正确检测是否安装了 msxml 6,如果未检测到则安装最新版本?
这就是我现在用来执行检测的东西(结合了我在上面 link 中找到的内容以及我在其他先决条件中使用的内容):
<!-- 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 < 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 < v6.0) AND (NOT MsXml6x64Installed)" />
</PackageGroup>
在我的 Bundle (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 时,我的 Win 7 计算机似乎安装了 SP3,而我在安装程序中使用的 msxml 包是用于 SP1 的?但这就是我不知道该做什么的地方;在我们的 Win 7 测试计算机上默认安装了 msxml 6 SP3,我们的 Win XP SP3 测试计算机默认安装了 msxml 6 SP2。我应该在安装程序中使用哪个 msxml 包,以便获得适用于从 XP 开始的所有 Windows 版本的解决方案?我无法在 Microsoft 的网站上找到 link SP3 或 SP2 的下载。
感谢任何帮助。
我不认为您链接的页面经过深思熟虑。您需要做的(通常)是观察任何给定先决条件的足迹,并就如何检测它做出最佳选择。对于 MSXML6,我使用 ORCA 编辑了 MSI,并在注册表中找到以下内容 table:
SOFTWARE\Microsoft\MSXML 6.0 解析器和 SDK\CurrentVersion
补丁级别 = 6.00.3883.8
我会去寻找那个 MSI 的不同 sp 级别,看看你是否找到趋势,然后在你的逻辑中使用它。
否则,在您的应用程序中添加 business/engineering XP SP3 要求是非常可靠且合理的方法。如果客户要 运行 遗留 OS 他们至少应该升级到最新的 SP。 Microsoft 已经切断了 XP 的 Windows 更新,并且您有充分的理由不再支持此 OS。结果将是一个更简单、更可靠的安装程序,开发和测试成本更低。
我正在为我们的软件创建一个需要 msxml 6 的 WiX 安装程序。如果我理解正确的话,msxml 6 随 Windows 从 XP SP3 开始提供,但由于我们的软件支持所有版本的 XP,我想有客户不会安装 msxml 6 的风险;因此,如果 msxml 6 尚未安装,我希望它由我们的安装程序安装。
我发现这个 page 显示了如何检测计算机上是否安装了 msxml 6,但没有说明安装了哪个版本(SP1、SP2 等)。
我的问题是如何正确检测是否安装了 msxml 6,如果未检测到则安装最新版本?
这就是我现在用来执行检测的东西(结合了我在上面 link 中找到的内容以及我在其他先决条件中使用的内容):
<!-- 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 < 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 < v6.0) AND (NOT MsXml6x64Installed)" />
</PackageGroup>
在我的 Bundle (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 时,我的 Win 7 计算机似乎安装了 SP3,而我在安装程序中使用的 msxml 包是用于 SP1 的?但这就是我不知道该做什么的地方;在我们的 Win 7 测试计算机上默认安装了 msxml 6 SP3,我们的 Win XP SP3 测试计算机默认安装了 msxml 6 SP2。我应该在安装程序中使用哪个 msxml 包,以便获得适用于从 XP 开始的所有 Windows 版本的解决方案?我无法在 Microsoft 的网站上找到 link SP3 或 SP2 的下载。
感谢任何帮助。
我不认为您链接的页面经过深思熟虑。您需要做的(通常)是观察任何给定先决条件的足迹,并就如何检测它做出最佳选择。对于 MSXML6,我使用 ORCA 编辑了 MSI,并在注册表中找到以下内容 table:
SOFTWARE\Microsoft\MSXML 6.0 解析器和 SDK\CurrentVersion 补丁级别 = 6.00.3883.8
我会去寻找那个 MSI 的不同 sp 级别,看看你是否找到趋势,然后在你的逻辑中使用它。
否则,在您的应用程序中添加 business/engineering XP SP3 要求是非常可靠且合理的方法。如果客户要 运行 遗留 OS 他们至少应该升级到最新的 SP。 Microsoft 已经切断了 XP 的 Windows 更新,并且您有充分的理由不再支持此 OS。结果将是一个更简单、更可靠的安装程序,开发和测试成本更低。