WiX Bundle bal:condition - util:RegistrySearch - 不工作

时间:2016-11-10 21:44:47

标签: wix registry bundle bootstrapper launch-condition

类似的帖子在这里,但我不能让我的工作 WiX Bundle bal:condition - util:RegistrySearch variable always false

先生,我正在努力让这个确切的事情发挥作用。 "版本"注册表项不存在时设置为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>

2 个答案:

答案 0 :(得分:0)

始终为您安装的原因是

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

将评估Version的存在而不是Version的值。由于您的注册表搜索已存在,因此版本始终已定义,因此条件始终通过。 (我相信这是因为所有注册表搜索变量都是隐式字符串变量)

如果您添加&#34;版本= 1&#34;然后,只有当您的注册表搜索找到了您正在寻找的内容时,您的安装才会继续。

我还想指出这种情况特别令人讨厌的陷阱。如果用户安装了您的捆绑包然后决定他们不再需要您的捆绑第三方程序,他们会卸载它们但是他们先卸载第三方程序会怎样?

您的安装程序将无法卸载,因为当它尝试运行时,它将失败bal:条件每次都是因为系统上不再存在第三方程序。

要解决此问题,您应该添加&#34;或者WixBundleInstalled&#34;你的bal:条件。

答案 1 :(得分:0)

Bal:条件不评估您是否使用MBA。请查看以下链接

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Wix-Burn-Bundle-condition-does-not-work-if-using-MBA-td7581757.html

更改

<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">

你会看到Bal:条件正常工作