[英]MsiPackage conditional install: Don't uninstall if it detects package is already installed
我正在使用 Wix Bootstrapper 并希望在我的主应用程序旁边通过 .msi 包安装一些应用程序。 这些应用程序可能已经安装在目标 PC 中,因此我需要先检测这些应用程序,如果它们已经安装则跳过安装。 此外,在卸载过程中,不应卸载这些应用程序,因为 Wix 引导程序没有安装它们。
我尝试使用InstallCondition
属性,但是(如预期的那样)如果它检测到应用程序已安装,它将卸载。
我的 Bundle.wxs 看起来像这样:
...
<Bundle>
<util:FileSearch Id='CheckApplicationX' Path='[ProgramFilesFolder]ApplicationX\ApplicationX.exe' Variable='ApplicationXFile' Result='exists' />
<Chain DisableRollback="yes">
...
<MsiPackage Id="InstallApplicationX" Vital="yes" Compressed="yes" DisplayInternalUI="no" EnableFeatureSelection="no" SourceFile="..\application-x.msi" Name="Application X" DisplayName="Application X" ForcePerMachine="yes" InstallCondition="NOT ApplicationXFile" />
...
</Chain>
</Bundle>
...
任何帮助/提示表示赞赏!
您可以通过查看 Windows 注册表来尝试检测是否安装了应用程序,并尝试确定这些应用程序是否留下了“痕迹”。
您可以使用RegistrySearch
标记对您正在查找的注册表项执行条件评估,然后拒绝安装。
Wix 网站上有一个示例,可在此链接中找到。
以下示例显示了如何定义 .NET 2.0 是否安装在目标机器上
<Property Id="NETFRAMEWORK20">
<RegistrySearch Id="NetFramework20"
Root="HKLM"
Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727"
Name="Install"
Type="raw" />
</Property>
<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
<![CDATA[Installed OR NETFRAMEWORK20]]>
</Condition>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.