【发布时间】: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