在安装Windows Installer软件包之前,请检查是否已安装必备软件。

时间:2019-03-12 12:09:54

标签: winforms windows-installer

我有一个在.Net 4.0上开发的.Net WinForms应用程序。 (Windows安装程序包)。该应用程序依赖于SAP Crystal Report运行时和MS Access运行时。我需要检查是否在用户计算机上安装了这两个必备组件,如果没有,请退出安装程序,并显示一个对话框,指出由于缺少必备组件而导致安装失败。

[编辑] 下图突出显示了我正在处理的安装程序项目的类型。这是一个旧的遗留应用程序。

https://i.stack.imgur.com/6sbYe.png

[编辑2] 在这里,我创建了“搜索目标计算机”,并创建了“添加注册表搜索”-“搜索Crystal Report运行时”

enter image description here

并在“启动条件”下创建了一个新的“启动条件”,称为“ CrystalReportRuntimeInstalled”。即使安装了该软件,这种情况总会以某种方式评估为false。我在做什么错了?

enter image description here

2 个答案:

答案 0 :(得分:0)

  

更新,因为您要使用WiX:

     

WiX快速入门 :您可以通过{{ 3}}:   Helge Klein

     

https://helgeklein.com/blog/2014/09/real-world-example-wix-msi-application-installer/。那   包括更多的源代码示例链接和各种链接。它是   “即席答案”(换句话说,是凌乱的),这似乎有助于   真实世界。我仍然想知道为什么,如果你能告诉我那是否是   正确与否会很好。

           

快速在线示例

<Condition Message="The .NET Framework 2.0 must be installed">
    Installed OR NETFRAMEWORK20
</Condition>

From MSI to WiX, Part 3 – Launch Conditions and Application Search:用于此目的的一般机制是LaunchCondition Table。您在此处添加了必须满足的条件(评估为true),软件包才能进行安装操作(不仅仅是全新安装)。您可以使用自定义操作来检查系统并设置属性,也可以使用内置的MSI搜索机制来设置属性。然后在指定的条件下使用这些属性。

启动条件问题 :在维护和卸载操作中,条件可能会意外评估为false。通常这是非常不希望的。一个示例是检查是否存在可以手动卸载的运行时,从而意外使主MSI无法卸载甚至升级。 LaunchCondition table(请仔细阅读)。

调整 :为确保 LaunchConditions 仅适用于全新安装(以及主要升级-从技术上讲,它们作为全新安装) ,有一种技巧可以将 "OR Installed" 添加到您所需的条件中。 Example here。到蝙蝠车。

示例 :以下是Described here中的一行示例(需要.NET版本4.7):

Installed OR DOTNETVERSION471FULL>="#461308", Microsoft .NET Framework 4.7.1 Full package or greater needs to be installed for this installation to continue.

答案 1 :(得分:0)

所以我必须检查注册表值的方法是从RegKey中删除名称“ CRRuntime32Version”,并将其添加到Registry Search属性的“ Value”部分,如下图所示。

enter image description here 同样,我为Microsoft Access Runtime 2013创建了两个注册表搜索。

enter image description here 注意:我基于机器的位数创建了两个不同的注册表搜索。

并如下所示修改了“启动条件”。

enter image description here 这是为Microsoft Access Runtime 2013设置的完整“条件”值。如果有更好的检查方法,请告诉我。

enter image description here 完成这些更改后,我构建了安装程序包。从目标计算机上卸载了先决条件和安装程序包。在尝试安装设置软件包时,出现如下所示的提示。

enter image description here