【问题标题】:Check another installed application before msi runs在 msi 运行之前检查另一个已安装的应用程序
【发布时间】:2016-03-24 02:08:42
【问题描述】:

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

因为我创建的应用程序依赖于另一个应用程序。如果我的应用程序必须在客户端机器上运行,那么该机器应该安装另一个应用程序。

假设 a.exe 依赖于 b.exe。

我已经为 a.exe 创建了 msi,当我在客户端机器上为 a.exe 运行 msi 时,这个 msi 必须检测 b.exe 是否安装在客户端机器上。如果没有,则终止 msi 安装

【问题讨论】:

  • 如何创建安装程序,是否使用visual studio打包部署项目?
  • 是否也使用基于 MSI 的安装程序部署了 b.exe?
  • Reza,是的,使用了 VSI 设置项目。
  • 您可能会发现this postthis one 很有帮助。

标签: c# windows-installer


【解决方案1】:

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

你可以使用升级机制。

维克斯:

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

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

并确保 FindRelatedProducts 在 LaunchConditions 之前排序。

【讨论】:

    【解决方案2】:

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

    通常,这些检查在实际应用中比在安装中效果更好。您正在强制执行可能毫无意义的安装顺序,因为您的 install 不依赖于 B,仅依赖于您的 应用程序。因此,允许任何安装顺序并在您的应用程序中添加检查说明如果未安装它需要 B 工作会更友好。如果用户卸载 B 是否意味着您的应用程序将崩溃,因为唯一的检查是在安装时?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 2012-03-09
      相关资源
      最近更新 更多