dotnetinstaller 配置以继续安装 MSI,即使先决条件失败

问题描述

我有一个使用 dotnetinstaller 构建的 VC++ 应用程序的设置。作为本机应用程序,VC++ 可再发行组件是先决条件。然而,现在这些变化非常频繁(每 6-8 周)。这意味着我们发布了应用程序的新版本,但在客户实际安装我们的应用程序之前,还会发布更新版本的可再发行组件并将其安装在客户计算机上。结果是我们设置中的旧可再发行组件将无法安装,因为存在更新的版本。这反过来又会导致安装失败,因此不会执行应用程序 MSI。

目前,解决方法是打开提升为管理员的命令提示符,并使用正确的参数运行 msiexec。我想为客户找到更好的体验。

VC++ 可再发行组件是作为必需的先决条件添加的。这意味着 required_install 属性设置为 true。这样做的结果是,未安装先决条件意味着安装失败。虽然 allow_continue_on_errordefault_continue_on_error 设置为 true,但用户会被告知失败并可以继续其他先决条件,但最终设置失败并且 MSI 执行不会开始。

我已尝试通过将 required_install 属性设置为 false 来使 VC++ 可再分发的可选先决条件成为可能。然而,这会导致另一种不受欢迎的行为。如果缺少任何必需的先决条件,则会显示先决条件对话框,我可以选中/取消选中可选的(因此如果我不想要它们,则跳过它们)。但是,如果找到所有必需的先决条件,而仅缺少可选的先决条件,则安装程序不会显示先决条件对话框并直接执行 MSI。

我需要一个选项来使这些先决条件成为可选的,因为安装它们失败不会停止 MSI 的执行;但是,我确实希望用户看到它们丢失了(如果有的话),并且可以选择安装它们。

dotnetintaller 可以以某种方式实现吗?

解决方法

似乎有一个安装 VC++ 可再发行组件版本的密钥,它是 HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\Microsoft\VisualStudio\14.0\VC\Runtimes\{x86|x64|ARM}。这在此处记录:https://docs.microsoft.com/en-us/cpp/windows/redistributing-visual-cpp-files?view=msvc-160

但是,版本以 v14.28.29913.00 形式存储在字符串中,如下所示: enter image description here Minor、Major、Build 和 Revision 也有 DWORD 值。

使用 dotnetinstaller 的一种解决方案是使用 installedcheck 组合 installedcheckoperator 操作。可以在 here 中找到一个示例。

最新版本的 dotnetinstaller 3.1.415 支持解析 v[version] 形式的字符串,例如 v14.28.29913.00,因此可以更轻松地检查 VC++ 可再发行组件版本。>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...