【问题标题】:Programmatically determine if future versions of Visual Studio runtime are installed以编程方式确定是否安装了 Visual Studio 运行时的未来版本
【发布时间】:2017-10-03 08:39:17
【问题描述】:

使用 Visual Studio Redistributable 2015 部署软件时,如果找到更新的可再发行组件,用户会看到一个令人困惑的对话框,暗示该软件有问题。

为避免这种情况,在使用 2015 运行时部署软件时,开发人员必须首先通过轮询注册表来检查是否存在较新版本的 Visual Studio 运行时,并在找到较新版本时避免尝试安装。

例如,以下是针对 Visual Studio 2015/2017 的 64 位系统的一些检查:

//Check for VS2015 on x86 architecture
if(installer.value("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\
             VisualStudio\\14.0\\VC\\Runtimes\\x86\\Installed") == 1)
{
    doInstall = false;
}
//Check for VS2017 on x86 architecture
if(installer.value("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\
             VisualStudio\\15.0\\VC\\Runtimes\\x86\\Installed") == 1)
{
    doInstall = false;
}

if(doInstall===true)
{  //Install }

(在 Qt 中为 installscript.qs 编写)

您可以看到检查的不同之处仅在于版本号,这目前适用于所有现有的 Visual Studio 运行时。我可以轮询任何现有版本的 Visual Studio 并通过简单地更改版本号来确认该安装是否存在。

所以现在,这是一个检查 2015 年或 2017 年是否存在并做出相应反应的简单案例。

问题:在我发布了我的软件之后,肯定会有我目前没有测试的更高版本的 Visual Studio。我需要在未来证明我的版本,以便如果已经存在假设的 Visual Studio 2020,我的安装程序不会尝试安装 Visual Studio 2015 可再发行组件。

目前我觉得唯一的解决方案是为这些假设的 Visual Studio 版本添加一大堆测试,遵循命名约定并增加一些覆盖程序预期寿命的大量测试。

这看起来像是 Y2kbug 类型的错误。感觉应该有更好的方法。我似乎找不到任何甚至考虑过这个问题的海报,更不用说解决方案了,所以我猜一定有一些众所周知的、明显的解决方案,而我只是错过了。

我最好的猜测是,可能存在一个通用注册表项,它只是指示是否安装了“任何”Visual Studio 产品,但我还没有找到。

【问题讨论】:

  • 这些安装程序是为最终用户设计的,当程序员忘记包含运行时 dll 或不可靠的安装程序覆盖了他们需要的那些时,可以帮助他们摆脱麻烦。如果您制作自己的安装程序,则始终使用合并文件或支持本地部署。始终优先考虑本地部署。

标签: visual-studio windows-installer


【解决方案1】:

我会亲自 regexp 从路径 VisualStudio\\**15.0**\\ 解析版本,然后测试 myRequiredVersion>ParsedVersion。 MS(或任何公司)总是有可能在命名约定方面陷入混乱并在未来改变整个路径,但这确实是所有事情的风险。无论如何,您可能应该询问用户他是否知道有(较新的)运行时/可再发行组件,并且即使您找不到合适的匹配项也允许安装。

【讨论】:

  • 我认为这种方法的主要风险是未来版本的 Visual Studio 运行时可能不会取代您需要的运行时。我认为汉斯的评论是在鼻子上。当然,必须有说明如何在安装程序中正确包含运行时的文档!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多