使用Visual Studio可再发行组件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 2015可再发行组件,如果有一个假设的Visual Studio 2020已经存在。
目前我认为唯一的解决方案是为这些假设的Visual Studio版本添加一大堆测试,遵循命名约定并进入一些覆盖程序预期寿命的大数字。
这看起来像Y2kbug类型的错误。感觉应该有更好的方式。我似乎无法找到任何海报甚至考虑过这个问题,更不用说它的解决方案了,所以我猜测必须有一些众所周知的,明显的解决方案,我才会失踪。
我最好的猜测是,可能有一个共同的注册表项,只是指示是否有任何' Visual Studio产品已安装,但我还没有找到。
答案 0 :(得分:1)
我个人regexp解析路径VisualStudio\\**15.0**\\
中的版本,然后测试myRequiredVersion> ParsedVersion。 MS(或任何公司)总是有可能通过命名约定变得混乱并在未来改变整个路径,但这确实是一切的风险。无论如何,您应该询问用户是否知道(更新的)运行时/可再发行,并且即使您找不到合适的匹配也允许安装。