Visual studio 以编程方式确定是否安装了Visual Studio运行时的未来版本
使用Visual Studio redistributable 2015部署软件时,如果发现较新的redistributable,用户将看到一个令人困惑的对话框,这意味着软件有问题 为了避免这种情况,在使用2015运行时部署软件时,开发人员必须首先通过轮询注册表来检查是否存在较新版本的Visual Studio运行时,并在找到较新版本时避免安装尝试 例如,以下是针对Visual Studio 2015/2017的64位系统的一些检查:Visual studio 以编程方式确定是否安装了Visual Studio运行时的未来版本,visual-studio,windows-installer,Visual Studio,Windows Installer,使用Visual Studio redistributable 2015部署软件时,如果发现较新的redistributable,用户将看到一个令人困惑的对话框,这意味着软件有问题 为了避免这种情况,在使用2015运行时部署软件时,开发人员必须首先通过轮询注册表来检查是否存在较新版本的Visual Studio运行时,并在找到较新版本时避免安装尝试 例如,以下是针对Visual Studio 2015/2017的64位系统的一些检查: //Check for VS2015 on x86 arch
//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编写)
您可以看到该检查仅因版本号不同而有所不同,目前所有现有VisualStudio运行时都是如此。我可以轮询任何现有版本的VisualStudio,只需更改版本号即可确认该安装是否存在
所以现在,这只是一个简单的检查2015年或2017年是否存在的案例,并做出相应的反应
问题:在我发布我的软件后,肯定会有我目前没有测试的Visual Studio的更高版本。我需要对我的版本进行未来验证,以便我的安装程序不会尝试安装Visual Studio 2015可再发行版本(如果已经存在假设的Visual Studio 2020)
目前,我觉得唯一的解决方案是为这些假设的VisualStudio版本添加一系列测试,遵循命名约定,并增加一些大的数字,以覆盖程序的预期寿命
这看起来像是Y2kbug类型的错误。感觉应该有更好的方法。我似乎找不到任何海报,甚至没有考虑到这个问题,更不用说解决方案了,所以我猜一定有一些众所周知的,显而易见的解决方案,我只是错过了
我最好的猜测是,可能有一个公共注册表项,它只是指示是否安装了“任何”VisualStudio产品,但我还没有找到一个 我会亲自从路径
VisualStudio\\\**15.0**\\\\
解析版本,然后测试myRequiredVersion>ParsedVersion是否为myRequiredVersion。MS(或任何一家公司)总是有可能在命名约定上走错方向,并在未来改变整个路径,但这确实是所有事情的风险所在。您可能应该询问用户是否知道存在(更新的)运行时/可再发行版本,并允许安装,即使您找不到合适的匹配项。这些安装程序是为最终用户设计的,当程序员忘记包含运行时DLL或不可靠的安装程序覆盖了他们需要的DLL时,可以帮助他们摆脱麻烦。如果您自己制作安装程序,则始终使用合并文件或本地部署。一定要首先支持本地部署。我认为这种方法的主要风险在于,未来的Visual Studio运行时版本可能不会取代您需要的运行时。我认为汉斯的评论很中肯。当然,必须有关于如何在安装程序中正确包含运行时的文档!