0

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

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

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

我尝试通过将required_install属性设置为false. 然而,这会导致另一种不希望的行为。如果缺少任何必需的先决条件,则会显示先决条件对话框,我可以选中/取消选中可选的先决条件(如果我不想要它们,则跳过它们)。但是,如果找到所有必需的先决条件并且仅缺少可选的先决条件,则安装程序不会显示先决条件对话框并直接执行 MSI。

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

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

4

1 回答 1

0

似乎有一个安装 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如下所示: 在此处输入图像描述 Minor、Major、Build 和 Revision 也有 DWORD 值。

使用 dotnetinstaller 的一种解决方案是组合installedcheck操作,使用installedcheckoperator. 一个例子可以在这里找到。

dotnetinstaller 的最新版本 3.1.415支持v[version]以诸如的形式解析字符串v14.28.29913.00,因此更容易检查 VC++ 可再发行版本。

于 2021-04-19T06:54:17.890 回答