谈谈我前段时间装VS 2022遇到的一个问题。
从VS 2019转到VS 2022或者两者共存时,有可能会遇到一些问题,比如我安装完后Windows Kits路径在注册表中的值就从 C:\Program Files (x86)\Windows Kits\10
变成了 C:\Program Files\Windows Kits\10
,从而导致部分头文件找不到的问题。
之前也遇到过一个 类似问题 ,或许原因是相似的。
Windowws SDK (也称Windows Kits)是在Windows 10/11系统上进行Win32应用与UWP应用开发所需的软件开发套件(SDK),用于提供相关的开发环境(库与头文件等)。
正常情况下,在Visual Studio Installer中选择安装C++桌面开发或通用Windows程序开发时会默认选择一个适合当前Windows系统版本的Windows SDK进行安装。
该问题表现为用VS 2022写程序出现找不到stddef.h
等文件的错误,但是用VS 2019就没有问题。
网上的解决方法通常是修改项目的包含路径,或者将文件夹复制一份到对应缺失的目录下,或者是重装SDK。
但是问题的具体原因还没找到,我决定一探究竟。
先查看一下VC++包含目录,发现里面关于Windows Kits的路径存在 C:\Program Files (x86)\Windows Kits\10\
与 C:\Program Files\Windows Kits\10\
两种值。
检查一下SDK安装目录,确认我的SDK是安装在 C:\Program Files (x86)\Windows Kits\10\
下面的。
上面路径中很明显 C:\Program Files\Windows Kits\10\Include\10.0.19041.0\ucrt
是有问题的,ucrt即Universal C RunTime(通用C运行时)。
在右边的宏里面,UCRT相关的路径很多也都是 C:\Program Files\
。
经过多番查找,我找到了解决方法。
记录 Windows Kits
路径的注册表项为 KitsRoot10
,存在于两个地方,分别在 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots
与 \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots
下面,大概对应64位程序与32位程序。
位于 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots
下的 KitsRoot10
的值莫名其妙变成了 C:\Program Files\Windows Kits\10\
,而WOW6432Node下的值是正确的。
把该值改成SDK实际安装的路径后,再打开VS问题就解决了。
这大概能解释为什么VS 2022会报错而2019不会,因为VS 2019是32位程序,优先找WOW6432Node下的值也无可厚非吧,而VS 2022可是高贵的64位程序,自然是先找64位的值。
所以为什么装了VS 2022后 KitsRoot10
变成了 C:\Program Files\Windows Kits\10\
?
评论(0)