在msi运行之前检查另一个已安装的应用

时间:2016-03-21 15:57:41

标签: c# windows-installer

我创建了简单的msi,现在我想在我的msi运行之前检查客户端计算机上是否安装了另一个应用程序。

因为我创建的应用程序具有另一个应用程序的依赖项。如果我的应用程序必须在客户端计算机上工作,那么该计算机应该安装另一个应用程序

让我们说a.exe依赖于b.exe。

我为a.exe创建了msi,当我在客户端计算机上运行msi for a.exe时,这个msi必须检测b.exe是否在客户端计算机中。如果没有,则终止msi isntallation

2 个答案:

答案 0 :(得分:1)

如果使用MSI安装了另一个应用程序,

您可以使用升级机制。

维克斯:

<Upgrade Id="<UpgradeCode of the another App>">  
   <UpgradeVersion Property="PREVIOUSINSTALLEDAPP" />
</Upgrade> 

<Condition Message="Please Install another application">
  <![CDATA[PREVIOUSINSTALLEDAPP]]>
</Condition>

确保FindRelatedProducts在LaunchConditions之前排序。

答案 1 :(得分:0)

如果您使用的是Visual Studio Installer,那么您的选项会受到限制。如果安装B创建了一个注册表项,则安装程序中的搜索目标计算机可以搜索该密钥并将其用作启动条件。如果您有B的MSI,那么您可以从Windows SDK工具包中使用Orca打开它,然后查看Component表并找到(例如)已安装的可执行文件的Component Guid。同样,这可以在Search Target Machine中用于Windows Installer搜索和启动条件。

通常,这些检查在实际应用中比在安装中更好。您强制执行可能毫无意义的安装订单,因为您的安装并不依赖于B,只依赖于应用程序。因此,允许任何安装订单并将检查放入您的应用程序中表示如果未安装则需要B才能正常工作。如果用户卸载B,那意味着您的应用只会崩溃,因为唯一的检查是在安装时?