2010-09-01 31 views
3

我的WIX安裝程序應檢查以前安裝的軟件版本。如果有較舊的安裝,則應安裝在相同的路徑中。我正在使用RegistrySearch執行此檢查。WIX - RegistrySearch返回錯誤的安裝位置

<Property Id="TARGETDIR"> 
    <RegistrySearch Id="InstallLocation" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[ANYVERSION]" Name="InstallLocation" Type="directory" Win64="no" /> 
</Property> 


其中[ANYVERSION]在

<Upgrade Id="MyGUID"> 
    <UpgradeVersion Property="OLDVERSION" IncludeMinimum="yes" IncludeMaximum="no" Maximum="$(var.VERSION)" Minimum="0.0.0.0" OnlyDetect="no" /> 
    <UpgradeVersion Property="NEWVERSION" IncludeMinimum="no" Minimum="$(var.VERSION)" Maximum="99.99.99.99" IncludeMaximum="no" OnlyDetect="yes" /> 
    <UpgradeVersion Property="EQUALVERSION" IncludeMinimum="yes" Minimum="$(var.VERSION)" Maximum="$(var.VERSION)" IncludeMaximum="yes" OnlyDetect="yes" /> 
    <UpgradeVersion Property="ANYVERSION" IncludeMinimum="yes" Minimum="0.0.0.0" Maximum="99.99.99.99" IncludeMaximum="yes" OnlyDetect="yes" /> 
</Upgrade> 


我檢查時,確定已經有我的軟件安裝的另一個版本工作正常。
當我的軟件沒有提前安裝時,檢查也有效,但有一個例外:當安裝了另一個應用程序時,它在中寫入一個條目(名稱爲installLocation),其中沒有子節點(GUID)HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall該檢查返回此應用程序的installLocation

我的支票有什麼問題?
RegistrySearch爲什麼返回沒有子節點的條目的installLocation?
有沒有可能使這個工作與registrySearch,還是我需要寫我自己的CustomAction?

回答

1

這是因爲如果找不到任何內容,則ANYVERSION將爲空,然後路徑將評估爲HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall。

一個解決方案(雖然不太優雅)是捕獲註冊表搜索的另一個屬性,並且只設置應該包含您的安裝目錄的屬性(TARGETDIR可能不是這裏的正確選擇)如果ANYVERSION被定義屬性設置自定義操作。