本文旨在,通过记录干净OS环境下 VS2015、Qt、WinSDK 软件安装前后,对系统环境变量、系统目录、系统安装程序和组件列表等带来了哪些变化,结合曾经在 “不干净的OS下” 安装或使用VS时的失败经验,分析在 “不干净的OS” 下,VS2015安装或使用异常的原因。主要围绕着VS2015或WinSDK的安装和卸载前后,在操作系统下增加和删除了哪些组件、如何修改了环境变量等问题展开。
近半年撞上两次 VS2015安装问题,耗费了不少时间。不很清晰地推测了这些奇怪问题背后的原因:其中一次可能是,PC安装过VS2019,卸载后再尝试安装 VS2015 ;另一次可能是,新入职用了一台别人的电脑,此电脑可能装载过VS或微软的其他产品,后来又卸载过,导致系统注册表、环境变量、系统目录等不是那么干净。
一切似乎都指向 “安装软件的OS环境” 被污染啦,而又 “很难” 清理干净。前几日干脆重装了系统,本文观察记录了下安装VS相关产品前后,关于系统目录、环境变量、控制面板程序列表等方面的变化,以便再出现开发环境安装问题时能有个参考。
2022年6月9号,重装了操作系统,系统版本Win10-1909,非系统盘格式化。
重装使用的操作系统版本 | 重装后控制面板/程序和功能列表 |
---|---|
如上,在VS安装前,OS已经安装了大量的微软组件,它们大多应该是不同VS版本的运行时库。我们插进来看看安装VS后,使用相同按名称排序时,系统内的相关组件安装情况:
系统重装后,初始的系统盘目录情况(Windows开头的):
重点关注,在此"纯净的"OS环境下,上述 Program Files (x86) 及 Program Files 目录下并没有 windows Kits 目录。
本节不具体关注VS安装方法。主要是观察在纯OS下的安装VS后,环境变量、系统目录等情况的变化,以对比先前或未来遇到的相关异常,为其提供有力的分析依据。本次安装后提示:
上图是在纯净OS环境下安装的结果,安装过程中并未出现其他的告警或异常。在非纯净(安装过VS或微软的其他产品,后又卸载过)环境下,(相同的安装包) 安装过程中还出现了其他的告警,如找不到JavaScript_LanguageService.msi等(该现象表明,问题在很大的程度可能是待安装环境导致的,而不是安装包本身导致的)。
上图中提示 Microsoft Visual C++ 2015 Redistributable (x64/x86)已安装这个产品的另一个版本;结合下图中的 Microsoft Visual C++ 2015-2019 Redistributable (x64/x86)(是在OS安装后,VS安装前就有了);那么此现象就不足为奇啦。
“已安装这个产品的另一个版本”,是常见现象,尤其是在高版本的OS下,安装相对低版本的VS软件时。另外,OS的Update过程,也会持续更新相关产品的版本,如:
可以看到上述选中行,20号这天,系统更新自动的给我安装了一个 Microsoft Visual C++ 2013 Redistributable(x86) - 12.0.21005,但是这个东西我其实在6月10日这天,装VS软件的时候就有了,而且版本、大小完全一致。
Redistributable 含义为 “可再发行的”。控制面板-卸载或更改程序窗口中,所有的 Redistributable*相关的产品,它们应该是些运行时组件,是在未安装 Visual Studio xxxx 的计算机上运行使用 Visual Studio 开发的应用程序所必需的(这些组件是可以单独下载package进行安装的-当然现在安装OS时基本都带全了)。
上图是按照安装时间排序了 Program Files (x86) 下的目录,上图中的全部目录,均是在VS安装后新增加出来的目录(不排除有极少文件夹只是修改,不是新增,当时没有仔细留意)。上图,与IDE密切相关的文件夹应该是:Windows Kits 和 Microsoft SDKs目录。Here,我们重点关注目录 C:\Program Files (x86)\Windows Kits,发现其下已经包含了 8.1/10/NETFXSDK目录,其中:
Windows Kits\8.1\Lib\winv6.3 仅包含一个um文件夹,查看其x64目录为例,其中包含齐全的lib系列文件(也即是可以用以开发的)。
Windows Kits\10\Lib\10.0.10150.0 仅包含一个ucrt目录,查看其x64目录为例,其中仅包含ucrt.lib*系列文件(不可以用以开发调试的)。
安装VS后的环境变量,相比安装前的环境变量,在PATH设置上多出来C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit; C:\Program Files\Microsoft SQL Server\120\Tools\Binn;两个路径。
如上图,是按照安装时间的筛选结果,它们全是VS安装完成后新增加的程序组件。好多啊,是不是!
安装Qt软件、VS的Qt插件的安装等请参见 《IDE/在VS2015中集成Qt开发环境》。
Qt软件无外置环境变量
Qt软件安装完成后,PATH环境变量并未发生任何变化。在qmake等运行时,其会设置临时环境变量,请参考其他文章。
本次先安装了VS2015,又安装了Qt5.12,在安装了VS的Qt插件,没有进行过任何的其他配置操作,直接新建Qt Widget 项目,可以编译成功并运行。我们再倒回重装OS前,那时是在 "不干净"的OS下,先装了Qt,再装的 VS 和 Qt 插件,当时新建项目后,直接无法通过编译,不但找不到Qt的lib库,修正后,继续提示找不到 shell32.lib 等问题(当时我安装了Win10的SDK后,此问题才消失。现在回想起来,怀疑原因可能是环境变量中配置了Win10的SDK路径,但是系统盘下却根本没有这个SDK的东西)。
好久以前用到SDK包是为了在QtCreator下能使用CDB调试。近期再次安装WinSDK包,是在VS中编译Qt最简单的项目都提示缺失shell32.lib等连接库(结合当前的实际问题,我安装了win10的SDK后,问题还真解决了)。在重装Win10系统,新装VS2015,新装Qt5.12,新装VSQt插件等一系列过程后,并没有再遇到类似问题。
但是我这里还是选择要安装下SDK,不为别的,就是看看它会给系统环境变量、系统盘目录,VS的相关配置项等带来什么变化,以便今后能识别出这种情况导致的IDE异常。最主要的,我就是想看看,在我安装Win10的SDK包后,系统环境变量的PATH中,C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit 路径会不会自动的被修改成 C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit ?
回想之前,若环境变量设置的是C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit,但实际上系统盘中压根就没有此目录(可能以前有,但是被卸载或删除了),能不带来问题吗?
注意环境变量下的路径,如下截图中8.1目录下,是VS2015原配的SDK开发库版本。至于目录10下压根没有 Windows Performance Toolkit 目录,我猜此目录仅仅是VS2015为了配合Win10操作系统而生成的一个运行时库,上文中也证实了,在该目录下的确不存在任何的WinSDK开发库文件。分别大略看下其目录结构:
本小节内容是在编写 <
其原因可能是没有识别到?是我安装的SDK版本太高?
为了做进一步验证,我又下载并安装了14393版本的SDK(在官网下载页面,它已经没有iso版本,其中的"安装模拟器"是指支持移动设备体验开发和 UX 测试的仿真器版本,这里我们选择点击"安装SDK",下载下一个sdksetup.exe文件,1.12M大小)…
双击运行它后,初始弹出的安装界面与iso版一致,安装过程也与iso版本一致,没有再提示我进行在线下载什么的。安装完成后,也没有想象中的那样,能在everything中再收到新增4个cdb.exe文件。只是,在搜索14393时,可以在如下路径C:\Program Files (x86)\Windows Kits\10\Licenses 找到10.0.14393.0 和 10.0.19041.0 目录)…
为了保证可靠性,我还重启了电脑,新建了VS2015项目,再去查看项目属性,依然没有看到多出来的平台选择项和调试器选择项…
难道是安装路径或系统环境变量的问题? 先看看环境变量:
在环境变量里查看到如下相关路径
C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit
在C:\Program Files (x86)\Windows Kits\10 文件夹下,确实没有Windows Performance Toolkit
为此我们将尝试安装 Debugging Tools for Windows 外的组件
我们在返回到WinSDK的安装界面(之前我们仅选择了Debugging Tools For Windows 一个选项)…
(重新安装某个版本的WinSDK前要先去控制面板里卸载之前的安装)我们也看到了一个与环境变量中提及的 Windows Performance Toolkit 重名的安装项,这次除了 Debugging Tools For Windows 我们也勾选上Windows Performance Toolkit 安装项,重新安装…
上述安装过程可能包含部分在线下载过程,这个我不确定,毕竟安装包才1.12M,这两个安装项总共好几百M大小,但是,我的手机热点流量显示只消耗了40M左右…
Windows Performance Toolkit 组件安装完成后
环境变量中多出来C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\ 配置,原先的C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\ 配置依然存在…
打开VS2015的目标平台选择,依然只有8.1一个选项…
不服了…
再次卸载14393,然后重新安装,这次把Windows SoftWare Development kit 安装项也一并选择上(大小在1.7G左右)…
果然,皇天不负有心人…
选择安装Windows SoftWare Development kit 项目后,VS目标平台版本的选择项中终于有了想看到的新选项。
注意,通过VS2015的开发工具(包括调试器、编译器等)去调用Win10的SDK开发包,是否合适?难道不是VS2015原配的8.1版本,不是更加合适吗?而且作为程序的发布者,能使用低版本便不去追寻更高版本,应该是明智的。
在准确安装VS2017的时候,我执行了对VS2015的卸载。卸载前,我对系统内发布者是MicroSoft 的所有程序和组件列表进行了快照,通过对比卸载后的列表,可以发现只有红色框标记的部分被移除了。而VS2015安装时,增加的那两个环境变量依然存在,并没有被移除,这可能是出于对系统的保护吧,因为VS并不确定这个路径只有它自己在用。
仅做记录,不做细致追究。
由于之前见过有人说,Visio的安装和卸载,可能对VS的开发环境造成一定的影响,如果visio的卸载可能会意外的干掉一些开发依赖的库。因此本次安装visio的时候,特别关注了下。安装完成后,控制面板程序和功能中只是增加了 Microsoft Visio Professional 2013这一个程序,并没有其他增加;系统环境变量PATH无变化。可以肯定的是,visio是依赖.NET框架,和VS的运行库的,因为它与其他office软件一样,都是微软的产品,都是可以支持编程的。
另外,之前不止一次的遇到过,在Visio软件开启状态下,QtCreator软件使用异常的情况。具体原因并未搞清楚。