微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Wix工具集捆绑链安装全局条件

如何解决Wix工具集捆绑链安装全局条件

上下文:我创建了Bootstrapper安装程序,以便在需要时安装.net Framework 4.8。连同我要提供的安装程序。

到目前为止,一切都很好用:我的程序始终安装并在需要时安装.net。

问题是我需要对此安装程序进行更多检查,例如检查注册表项(如果安装了另一个程序的正确版本),并且如果不符合条件,则应该中止完整安装,则不应安装任何内容

问题:我添加InstallCondition仅影响MsiPackage,但其余安装似乎都可以正常进行,并且安装成功完成,这里很有趣代码的一部分:

<util:RegistrySearch Id="OtherProgramVersionId" Root="HKLM" Key="SOFTWARE\XXX\Install::Version" Variable="OtherProgramVersion"/>

<Chain>
  <PackageGroupRef Id="NetFx48Redist" />
  <MsiPackage 
    Id="MySuperProgram.Setup" 
    SourceFile="$(var.MySuperProgram.Setup.TargetPath)"
    InstallCondition="OtherProgramVersion >= v10.0"/>
</Chain>

如前所述,即使未找到注册表项或注册表项不满足条件,安装也似乎“成功”继续,并且我在ControlPanel-> Programs中将其安装了...但是主.msi尚未真正安装! (检查目标文件夹,它为空)

问题::如何添加全局条件以完全停止所有安装并向用户显示条件未满足的消息?如果可能的话,可以使用标准对话框。

我已经看到(并且我仍然在体验)有条件,但是似乎它们只影响链中的一项...或者它们似乎以某种方式破坏了安装,我尝试添加到.msi安装程序创建中,文件Product.wxs,为了中止此安装的条件,但是在安装时,我得到这个未通过的条件作为安装错误,似乎出口根本不干净...甚至可以在我看到某物的地方看到日志像这样:

错误0x80070643:安装MSI软件包失败。

谢谢!

解决方法

如果您使用的是WixStandardBootstrapperApplication,则可以使用bal:Condition来定义捆绑包级别的条件。 WiX文档中有一个示例:https://wixtoolset.org/documentation/manual/v3/howtos/redistributables_and_install_checks/block_stdba_install_on_reg.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。