缘起

前一段时间,有网友遇到一个奇怪的问题,说他机器上的 vs2019 编译 C++ 工程报错。我当时一听就有两个怀疑:

  1. 工程设置不对。

  2. vs2019 没装好。

因为新建一个最简单的工程,编译也报一样的错误,所以可以排除工程设置的问题了。那只有可能是 vs2019 的问题了。但是具体是哪里的问题呢?

他按照错误提示搜索到了如下链接:

https://developercommunity.visualstudio.com/content/problem/761788/msb8036-the-windows-sdk-version-100183620-was-not.html

根据链接里的提示,做过尝试,没能解决问题。后来在我们沟通的过程中,他自己解决了问题,这不就是大名鼎鼎的橡皮鸭调试法吗?当他的问题解决后,我特意在本地重现了整个过程,做了一些调查,整理成本文,分享给大家。

编译受阻

我用 vs2019 新建了一个最简单的 Hello world 工程,编译,报错如下:

Error MSB8037 The Windows SDK version 10.0.18362.0 for Desktop C++ x86 Apps was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution".

更直观的报错截图如下:

问题排查

既然提示找不到对应版本的 SDK,那么先到工程属性里看一下对应的配置。在工程上,右键 -> 属性 。在工程属性对话框中选择 Configuration Properties 下的 General 。在右侧查看 Windows SDK Version 的值,确实是 10.0.18362.0,如下图。

工程 SDK Version 配置

本地搜一下10.0.18362.0,看看本地是否存在相关的路径。

everything 搜索结果

本地也存在相关路径。能想到的可以怀疑的地方都排除了。接下来请出我们的老朋友 —— process monitor

深入调查

打开 process monitor,开启监视,在 vs 中开始编译,问题重现后,停止监视。

下面就要进行最重要的步骤了—— 过滤。

使用 process monitor 快速解决问题的关键在于过滤出与问题有关的事件!

我们需要根据什么条件过滤呢?

一般操作结果是成功的事件对我们帮助不大,所以首先过滤掉 ResultSUCCESS 的事件。

既然提示的是找不到 10.0.18362.0 版本的 SDK ,相关错误应该和 10.0.18362.0 有关,所以只保留 Path 中包含 10.0.18362.0 的记录。

没想到,效果这么好,只有六条。

其中,有两条是注册表中找不到 HKLM\Software\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0.18362.0(这个注册表项不是必须存在的,在能正常编译的机器上也可能找不到),最后一条是找不到文件 C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\sdkddkver.h。看来,应该是我本地少了这个文件。因为我故意把这个文件重名了,改回来,重新编译,搞定。

具体调查过程请参考下面的屏幕录像。

troubleshoot-missing-sdk-10.0.18362.0-screen-record

后记

跟这位网友沟通的整个过程特别顺畅,省心。他已经根据线索在网上搜索了相关资料,自己摸索了一番。怀疑哪里有问题,立刻能查看相关的配置进行排查。最后,在沟通的过程中,他自己就把问题解决了。原来,他在前几天把一些文件的位置给改了,改回来就好了。后来聊天得知,他才大二,后生可畏!

总结

在帮网友解决问题的过程中,我扮演的角色其实类似 “橡皮鸭”。也希望大家遇到问题时,把问题描述给周围的人,也许自己就知道问题出在哪了。屡试不爽!

猜你喜欢:

VS 系列:

排错实战——解决c++编译错误:error C2059: illegal token on right side of '::'

善用 vs 中的错误列表和输出窗口,高效查找 C++ 多工程编译错误

转储文件系列:

转储系列文章总结

转储文件知多少

你需要知道的 N 种抓取 dump 的工具

你生成的转储文件有问题吗?

向大厂看齐!为自己的程序增加自动转储的功能!

内核转储,开抓啦!

蓝屏(BSOD)转储设置,看本文就够了!

系统蓝屏的几种姿势,确定不了解下么?

本地内核调试环境搭建,就这么简单!

双机内核调试 101

使用 VMware + win10 + VirtualKD + windbg 从零搭建双机内核调试环境

使用 VMware + win10 + vs2019 从零搭建双机内核调试环境

本地内核调试神器 —— livekd 使用总结

调试系列:

调试实战——你知道怎么使用DebugView查看调试信息吗?

调试实战——程序CPU占用率飙升,你知道如何快速定位吗?

调试实战——崩溃在ComFriendlyWaitMtaThreadProc

调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs

调试实战——调试PInvoke导致的内存破坏

调试实战——调试excel启动时死锁

调试实战——调试DLL卸载时的死锁

调试实战——调试TerminateThread导致的死锁

调试实战——从堆里找回“丢失”的代码

调试实战——从堆里找回“丢失”的代码相关命令简介

排错系列:

排错实战——1分钟解救 run 不出来的 Autoruns

排错实战——VS清空最近打开的工程记录

排错实战——拯救加载调试符号失败的IDA

排错实战——你知道拖动窗口时只显示虚框怎么设置吗?

排错实战——解决Tekla通过.tsep安装插件失败的问题

排错实战——使用process explorer替换任务管理器

排错实战——通过对比分析sysinternals事件修复程序功能异常

欢迎留言交流

需要你的

帮 vs2019 找回丢失的 SDK相关推荐

  1. 电脑文件剪切到U盘,为什么不见了?这4个技巧帮你找回丢失文件

    文件剪切是指对计算机中的文件进行移动操作,将文件从原先的位置剪切到新的位置,然后将这些文件粘贴到新的位置,以完成文件的整个剪切操作.虽然剪切操作起来并不难,但是近日,有位小伙伴遇到了将电脑文件剪切到u ...

  2. 历经24小时,依靠全球定位,帮女朋友找回丢失的华为手机!

    本人很少写非技术文章,由于这两天找回手机的经历过于魔幻,所以必须分享一波.手机丢了金钱的损失先不说,但是里面的资料都是无比重要的,正好自己亲身经历,并且也成功找回了手机,索性就把经验分享一下,希望能给 ...

  3. 快速搭建GPS追踪系统,帮你找回丢失的女朋友

    许多人常常在陪女朋友逛街时,一不留神就把女朋友弄丢了,那个如何有效的找回女朋友呢?我们从技术党的角度出发,下面我为大家介绍一款神器. Traccar 这是一个开源的 GPS 跟踪系统.此存储库包含基于 ...

  4. origin账号能买吗_一名Origin用户价值上万的游戏账号被莫名删除 EA客服起初竟拒绝帮他找回丢失的账号...

    EA的Origin是一个像Steam一样的游戏发售平台,虽然它不如Steam有名,但是EA的游戏都只在这里发售,所以也拥有不少用户.不过最近,一名Origin用户发现,他账户下的所有游戏居然莫名消失了 ...

  5. U盘文件丢失了怎么办?一串英文字符即可快速帮你找回,秒学!

    日常工作中,U盘是我们必不可少的随身小工具,用它来拷贝文件很方便快捷,可是一旦U盘文件丢失了,很多努力都功亏一篑,甚至耽误很多大事情,不过没关系,接下来,小编教大家一招,只需一串英文字符即可快速帮你找 ...

  6. id 查找apple_厉害!竟能利用苹果ID锁找回丢失手机?

    原标题:厉害!竟能利用苹果ID锁找回丢失手机? 不少朋友由于是新买的苹果手机,对其安全功能设置还不尽了解.其实,苹果系统自带的安全程序十分完善,其中最重要的就是查找我的iPhone里的相关功能.今天, ...

  7. 苹果手机iphone丢了怎么找回来?八步帮你找回苹果手机

    本教程不能肯定能找回苹果手机,苹果手机丢了能否找回肯定是有概率的,而且找回的概率肯定不大,下面的方案,无论是否可以找回手机,至少提醒我们苹果手机丢失以后如何规避风险或者把风险降到最低,请广大苹果丢友参 ...

  8. 让模糊图片变视频,找回丢失的时间维度,MIT这项新研究简直像魔术

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在拍照时我们常常会遇到这样的苦恼:由于设置的快门时间太长,快速运动的物体会在身后产生严重的拖影. 除非是为了特殊的艺术效果,一般来说这张照片 ...

  9. git怎么操作会丢失自己的代码_git找回丢失的代码

    多人开发时找回丢失的代码 1.先保证所有分支的代码都已经提交并拉取到最新状态. 2.最重要的是需要找到最近一条自己代码还存在的记录,然后复制到最近的更早一条的提交记录的id,比如e36e9e76da1 ...

最新文章

  1. 养猪场招研究生年薪18万起?!你怎么看?
  2. 按AI顶会评实力:美国7倍领先中国,谷歌雄霸全球第一,腾讯和清华分获中国产学No.1...
  3. 小派(PiMax)vr Artisan固件升级失败,没反应了
  4. Redis BitMap适应场景
  5. 卷积神经网络初探 | 数据科学家联盟 http://dataunion.org/20942.html
  6. 阿里神器 Arthas 有多强?教你一招定位线上Bug!
  7. ubuntu终端按ctrl+s就卡住怎么办?(按ctrl+q)(锁住)(锁屏)(暂停打印)
  8. VTK:Points之DensifyPoints
  9. win10 子系统 ubuntu 16.04 安装 docker
  10. linux6.6 sudo环境变量,linux sudo环境变量设置
  11. Asynchronous(异步处理-Promise)
  12. 这下终于可以方便地发表测试型网页代码了(附源码下载)
  13. 联想台式主机拆机教程_联想发布全新刃9000台式主机:搭载英伟达最新显卡+8999元...
  14. 推荐系统思维导图——第二章
  15. 实战 - Nexus搭建Maven私服
  16. c语言中常用数学符号,C语言入门知识:运算符
  17. 5.16 图层合并的几种方式 [原创Ps教程]
  18. “Your Firefox profile cannot be loaded. It may be missing or inaccessible.“
  19. 修改build.prop文件,可更改新浪微博尾巴显示
  20. python实现百度语音合成(超详细!!)

热门文章

  1. JIL 编译与 AOT 编译
  2. Debian7 apt源设置
  3. 一个入门的学生选课系统
  4. chrome 网页重新加载_在Chrome中为各个网页设置自定义重新加载时间
  5. 关于vue父子组件之间事件触发及数据传递问题
  6. Oracle 12C CDB、PDB常用管理命令
  7. ORACLE 11G DATA GUARD主从切换
  8. OC之非ARC环境下循环retain问题
  9. 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)...
  10. Eclipse Java注释模板设置详解