ClickOnce 安装程序先决条件:如何自动检测所需版本的 Visual C++ 运行时

Dan*_*ham 5 c# clickonce redistributable publish prerequisites

我编写了一个 C# 应用程序,需要安装 Visual C++ 2010 可再发行组件,并且我使用 Visual Studio 中的内置“发布”机制来分发该应用程序 - 它使用 Microsoft 的“ClickOnce”安装程序技术。

我发现我需要单击“发布”页面上的“先决条件”按钮,但存在问题。

由于不知道用户是 x86 位还是 64 位,我必须选中可再发行版本的 x86 和 x64 版本。

但如果 x86 用户安装它,他们会收到错误:“系统组件 Visual C++ 2010 运行时库 (x64) 的先决条件检查失败,并显示以下错误消息:“仅在 x64 上支持安装 Visual C++ 2010 运行时库 (x64)机器。”

但如果我不包含 x64 版本,则 64 位用户将无法使用该安装程序。

另一个问题是,某些用户收到错误“在计算机上检测到较新版本的 Microsoft Visual C++ 2010 Redistributable”,并且安装程序失败。

整件事看起来就像是一团糟。ClickOnce 安装程序技术是否足够聪明,能够确定用户是否需要 x86 还是 64 位版本的 C++ 可再发行组件?如果安装了较新的版本,这真的是一个障碍吗?

这一切看起来都很脆弱,似乎应该有一个非常简单的修复方法。

Rob*_*Net 0

ClickOnce 是应用程序的实际部署,而不是引导程序。发布 ClickOnce 应用程序将创建一个 setup.exe,它是为您安装必备组件的引导程序。你的问题出在先决条件上。

您可以使用引导程序清单生成器(或记事本)创建使 C++ 可再发行组件成为必备包所需的 XML 包信息,您可以从 Visual Studio/发布/先决条件对话框中选择该包。我建议您以这种方式设置先决条件,并查看 Bootstrapper 文件夹中的一些其他包(例如 SQLExpress)以了解它们是如何完成此操作的。