繁体   English   中英

MsiPackage 条件安装:如果检测到 package 已安装,请不要卸载

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM