2015-02-11 132 views
0

我正在爲我們的軟件創建一個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 &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> 

在我的包(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的下載鏈接。

我很感激任何幫助。

+0

時間放棄XP和移動到Windows 7,8或10. – Raptor 2015-02-11 10:34:17

+0

不幸的是,這不是我的決定。 – dbostream 2015-02-11 11:52:35

回答

1

我不相信你鏈接的頁面是非常深思熟慮的。你需要做的(一般)是觀察任何給定的prereq的佔用空間,並在如何檢測它的最佳選擇。對於MSXML6我編輯的MSI使用ORCA,發現在註冊表中的以下內容:

SOFTWARE \微軟\ MSXML 6.0分析器和SDK \ CURRENTVERSION PATCHLEVEL = 6.00.3883.8

我會去尋找不同的SP水平MSI,看看你是否發現了一個趨勢,然後在你的邏輯中使用它。

否則,將XP SP3的業務/工程要求放在您的應用程序上是非常合理且合理的方法。如果客戶要運行傳統操作系統,他們應該至少達到最新的SP。微軟已經切斷了Windows Update的XP,並且你已經非常堅實地不再支持這個操作系統。結果將是一個更簡單,更可靠的安裝程序,開發和測試成本更低。

+0

感謝您的意見,我會推薦專注於XP SP3和更新版本,因爲我相信大多數客戶至少已經轉移到Windows 7,因此它很可能不值得花費額外的時間和精力來覆蓋所有版本的XP。 – dbostream 2015-02-11 15:08:13

+0

接受的答案讚賞。 – 2015-02-11 15:22:42