Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 以编程方式确定是否安装了Visual Studio运行时的未来版本_Visual Studio_Windows Installer - Fatal编程技术网

Visual studio 以编程方式确定是否安装了Visual Studio运行时的未来版本

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

使用Visual Studio redistributable 2015部署软件时,如果发现较新的redistributable,用户将看到一个令人困惑的对话框,这意味着软件有问题

为了避免这种情况,在使用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编写)

您可以看到该检查仅因版本号不同而有所不同,目前所有现有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运行时版本可能不会取代您需要的运行时。我认为汉斯的评论很中肯。当然,必须有关于如何在安装程序中正确包含运行时的文档!