2016-11-10 56 views
0

類似的職位是在這裏,但我不能讓我的工作 WiX Bundle bal:condition - util:RegistrySearch variable always false維克斯捆綁BAL:條件 - UTIL:RegistrySearch - 不工作

主席先生,我很努力得到這個確切的事情工作。如果註冊表項不存在,則將「版本」設置爲0;如果存在密鑰,則將其設置爲1。無論是哪種情況,我的包仍然安裝。

我使用VS 2015和WIX 3.10。請問你能幫忙嗎?

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" 
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"> 
<Bundle Name="XXX" 
     Version="XXX" 
     Manufacturer="XXX" 
     UpgradeCode="XXX" 
     IconSourceFile="XXX" 
     Copyright="XXX" > 

<util:RegistrySearchRef Id='SearchForMyIns' /> 

<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost"> 
    ... 
</BootstrapperApplicationRef> 

<Chain> 
    <PackageGroupRef Id='NetFx40Web' /> 

    <MsiPackage SourceFile="$(var.DummyInstaller.TargetDir)\DummyInstaller.msi" DisplayName="Dummy Conditioning" />  
</Chain> 
</Bundle> 

<Fragment> 
<util:RegistrySearch 
     Id='SearchForMyInst' 
     Variable="Version" 
     Result="exists" 
     Root="HKLM" 
     Key="SOFTWARE\MyInst" 
     Win64="yes" /> 
<bal:Condition Message="ThirdParty Application Required.">Version</bal:Condition> 
</Fragment> 

</Wix> 

回答

0

這始終是安裝你的原因是

<bal:Condition Message="messagehere">Version</bal:Condition> 

將評估版本是否存在等不版本的價值。由於您的註冊表搜索存在,因此版本爲總是定義,因此該條件始終通過。 (我相信這是因爲所有註冊表搜索變量都是隱含的字符串變量)

如果添加「版本= 1」,則只有在註冊表搜索找到您要查找的內容時,才應繼續安裝。

我還想指出這種情況特別討厭的缺陷。如果用戶安裝你的軟件包然後決定他們不再需要你的軟件包了,並且他們都卸載它們,但是他們會先卸載第三方程序?

安裝程序將無法卸載,因爲它在嘗試運行時會失敗bal:條件,因爲第三方程序不再存在於系統中。

要解決此問題,您應該在您的bal:Condition中添加「OR WixBundleInstalled」。