我正在爲我們的軟件創建一個WiX安裝程序,它需要msxml 6.如果我理解正確msxml 6隨Windows從XP SP3開始出貨,但由於我們的軟件支持XP的所有版本,我猜這是有風險的客戶不會安裝msxml 6;因此我希望我們的安裝程序安裝msxml 6,前提是它尚未安裝。WiX msxml 6先決條件
我發現這個page顯示如何檢測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 < 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>
在我的包(86):
<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網站的SP3或SP2的下載鏈接。
我很感激任何幫助。
時間放棄XP和移動到Windows 7,8或10. – Raptor 2015-02-11 10:34:17
不幸的是,這不是我的決定。 – dbostream 2015-02-11 11:52:35