前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Visual Studio 2019 惨痛 踩坑 经历 0x80070490 0x80040154

Visual Studio 2019 惨痛 踩坑 经历 0x80070490 0x80040154

原创
作者头像
Windows技术交流
修改2021-12-13 12:58:16
18.2K0
修改2021-12-13 12:58:16
举报
文章被收录于专栏:Windows技术交流Windows技术交流

我并不是程序员,用VS2019也就最近一个月的事,前段时间用VS2019跑腾讯云API Explorer工具里的7种SDK时用它搞PythonSDK、Node.jsSDK、.NETSDK、C++SDK,java php go sdk需要单独配。后来莫名其妙VS软件出了问题,老是报错 (异常来自 HRESULT:0x80070490),但是用CMD命令行调试程序是正常的,用VS软件调试就报这个错:

System.Runtime.InteropServices.COMException: 找不到元素。 (异常来自 HRESULT:0x80070490) (内部异常 #0) System.Runtime.InteropServices.COMException (0x80070490): 找不到元素。 (异常来自 HRESULT:0x80070490)

网上找了一圈,耗费了好几天验证修复方案,此处我省略一万个fu*k。

先说下经验总结:不论是Visual Studio 2017/2019的安装、更新、卸载、下载离线文件等,不要暂停,必须一次性成功,如果暂停了,建议重装系统从新来一遍。尤其是更新,未更新完成之前不要重启机器!!!我这次出问题就是VS更新导致的,可能更新了一半手动重启了。

汇总下网上关于0x80070490报错的方案:

①卸载重装

②修复

③打Windows补丁

④运行InstallCleanup.exe

⑤缺VC库,安装VC库

⑥IIS可能坏了,卸载重装IIS

⑦离线安装

接下来我挨个说下里面的坑

①卸载重装

https://visualstudio.microsoft.com/zh-hans/downloads/ 这个链接下载安装文件,下载下来文件名有点长,可以在cmd命令行ren重命名成vs_setup.exe

关于VS的版本号:https://docs.microsoft.com/zh-cn/visualstudio/install/visual-studio-build-numbers-and-release-dates?view=vs-2019

我们一般用社区版就行。

如果你之前安装过,那你再次运行安装程序会看到修复和卸载

可能是我运气不好,遇到软件异常报错试了很多办法都不起作用,选了这个修复,太耗时了,远大于重装系统、全新下载部署的时间,如果你时间充裕那你可以试一下修复

至于卸载,可以试试,不过最后你要用清理注册表的工具清理下Visual Studio的注册表垃圾

如果是更新失败需要全新安装,你最好分4步走:

  • 运行安装文件,点卸载
  • 清理注册表垃圾
  • 把默认安装包缓存文件夹里的内容清理干净:%ProgramData%\Microsoft\VisualStudio\Packages(如果用--path cache="xxx"指定了新的位置则清理新指定的位置)
  • 全新安装,务必一次性成功,不要暂停或中断

②修复

上面已经提了,尽量不选这个

③打Windows补丁:KB947821

毛用没有,不过我还是列下补丁地址吧

32位Win7 SP1/2008R2

https://www.microsoft.com/zh-cn/download/details.aspx?id=3132

https://download.microsoft.com/download/4/7/A/47A0F7B9-1F0F-41B0-AA42-00FD16337268/Windows6.1-KB947821-v34-x86.msu

64位Win7 SP1/2008R2

https://www.microsoft.com/zh-cn/download/details.aspx?id=20858

https://download.microsoft.com/download/E/8/D/E8DAA970-1036-447F-B5EA-716D4BA70EC5/Windows6.1-KB947821-v34-x64.msu

④I最坑的就是运行%programfiles(x86)%\Microsoft Visual Studio\Installer\resources\app\layout\InstallCleanup.exe

执行了installcleanup就没办法正常卸载了,但一开始我并不知道这一点

执行后还是报错,但是报错信息发生变化了

从 0x80070490 变成了 0x80040154

当时那个报错日志文件的位置是:C:\Users\Administrator\AppData\Local\Temp\2\VsProjectFault_5beda864-f2de-4bfe-a84f-58ab85643b30.failure.txt

Line 4: System.AggregateException: 发生一个或多个错误。 ---> System.Runtime.InteropServices.COMException: 检索 COM 类工厂中 CLSID 为 {177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。

Line 34: ---> (内部异常 #0) System.Runtime.InteropServices.COMException (0x80040154): 检索 COM 类工厂中 CLSID 为 {177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。

再强调一遍:installcleanup一执行,你就没法正常点卸载按钮了,无法正常卸载就只能手动删除,谁这么牛逼能快速、干净地删完VS?本来还有个卸载,执行了InstallCleanup后,卸载按钮就找不到了,你要想节省点时间,重装系统从头来过会比较省时间。千万别再浪费时间测试其他方案了。

⑤缺VC库,安装VC库

网上还说缺VC库,我安装了最全最新的VC库也还是不起作用。在网上搜“微软常用运行库合集”或“2020 VisualCppRedist_AIO_x86_x64”下载安装即可。

Windows平台很多软件都依赖VB、VC库,比如Windows安装PHP环境,如果你不安装VC库,你的PHP源码就没法正常解析。微软自己的很多软件安装过程中都自动安装VC库,所以我们平常很少需要单独安装VC库,但第三方软件不一样,需要我们自己安装下软件依赖的VC库。

我目前用的20200317版,http://www.opdown.com/soft/212262.html

安装过程中杀毒软件可能会拦截,请信任之。

⑥IIS可能坏了

思路:卸载IIS、暂时先不重装IIS

近来我直接在IIS里调试网站是正常的,我不觉得是IIS的问题,另外,console代码调试也用不到IIS,但仍然报错0x80070490就很奇怪了 2008R2的IIS是7.5

VS2019带的IIS是IIS10 Express,有可能是IIS10 .0 Express出问题了

卸载了系统自带的IIS和VS2019带的IIS10.0 Express,没再安装,通过VS2019调试console代码仍然报错HRESULT:0x80070490,通过CMD命令行调试是正常的。

总之,就不是IIS的事。我IIS一直是好的,最近对VS2019干过的操作就是硬盘剩余空间不足,我把存放VS2019 package的将近5GB的文件夹%ProgramData%\Microsoft\VisualStudio\Packages里的内容给删了

从报错信息看,最开头的几行如下

System.AggregateException: 发生一个或多个错误。 ---> System.Runtime.InteropServices.COMException: 找不到元素。 (异常来自 HRESULT:0x80070490)

在 Microsoft.VisualStudio.Setup.Configuration.ISetupConfiguration.GetInstanceForCurrentProcess()

其中的“异常来自 HRESULT:0x80070490”经常在IIS场景中碰到,大不了重装下IIS,此外最关键的就是Microsoft.VisualStudio.Setup.Configuration.ISetupConfiguration

VisualStudio.Setup.Configuration顾名思义跟VS的安装配置有关,正好我把存放VS安装包的文件夹清理,是否重新下载一份放到原位置就可以了?

通过以上分析,这个报错我觉得跟VS的更新有关。

这让我想起来,我安装VS2019用了段时间,给我推送过几次更新,第一次的我安装后系统盘剩余空间越来越小,第二次推送的我点了下,但是没有安装,然后用了段时间,剩余空间不够用了,我就把存放安装包的文件夹删掉了,然后过了不久发现报错HRESULT:0x80070490。

⑦离线安装

第一步,把安装文件下载到机器,需要35G的空间,要不然会中途失败,然后你重新开始的耗时是全新下载的N倍,因为它下载过程中要校验进度、校验已经存在的文件是否完好,一两个文件检验就算了,是若干G甚至一二十G的N多个文件校验……

就这个35G空间的事,网上那些爱分享的人可没一个提及,微软官网文档倒是提了,你如果没仔细看不容易注意到,可能是我运气不好或者英语不好吧

我第一次搜到的文档是英文的,没有第一眼注意到至少35G空间的提醒

后来我转化成中文的网页才注意到

英文文档:https://docs.microsoft.com/en-us/visualstudio/install/create-an-offline-installation-of-visual-studio?view=vs-2019

中文文档:https://docs.microsoft.com/zh-cn/visualstudio/install/create-an-offline-installation-of-visual-studio?view=vs-2019

URL里,就代表语言的en-us和zh-cn不同,其他都一样

如果你安装VS2019,强烈建议把微软官网文档认认真真读几遍,尤其里文档里彩色背景标记的注意事项,一定要多读几遍,否则看网上那些爱分享的人的简易文档极易踩坑,他们只顾自己爽,哪管别人死活,很多注意事项都不提。

你还是看微软文档比较好,我重点提几个地方:

  • 容量,35G,我在云服务器上买了40G的云盘专门用来存放VS离线安装文件
  • 证书,下载好离线安装文件后,里面有个证书目录,其中有3个证书,在安装VS之前需要分别双击导入这3个证书,按默认的下一步、下一步,直到最后,中途无需自己做其他选择,就默认到底就行。
  • 如果你已经成功安装社区版,需要联网激活下
  • 关于下载离线安装包的命令

由于VS分了很多模块,按模块安装需要知道模块名称,下载你需要的模块的离线文件即可,要不然35G的全文件下载下来也是很耗时的

https://docs.microsoft.com/zh-cn/visualstudio/install/workload-component-id-vs-community?view=vs-2019

左侧你可以切换VS的版本,不同版本的VS对应的模块可能不太一样,上面URL是社区版的模块

我用的社区版的这几个模块

  • Visual Studio 核心编辑器(Visual Studio Community 2019 随附)Microsoft.VisualStudio.Workload.CoreEditor
  • ASP.NET 和 Web 开发 Microsoft.VisualStudio.Workload.NetWeb
  • Python 开发 Microsoft.VisualStudio.Workload.Python
  • Node.js 开发 Microsoft.VisualStudio.Workload.Node
  • .NET 桌面开发 Microsoft.VisualStudio.Workload.ManagedDesktop
  • 使用 C++ 的桌面开发 Microsoft.VisualStudio.Workload.NativeDesktop
  • 通用 Windows 平台开发(UWP) Microsoft.VisualStudio.Workload.Universal
  • 独立组件:适用于 Visual Studio 的 GitHub 扩展 Component.GitHub.VisualStudio

命令1:下载离线文件

vs_setup.exe --layout e:\vslayout --add Microsoft.VisualStudio.Workload.CoreEditor --add Microsoft.VisualStudio.Workload.NetWeb --add Microsoft.VisualStudio.Workload.Python --add Microsoft.VisualStudio.Workload.Node --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --add Component.GitHub.VisualStudio --includeRecommended --lang zh-CN

如果报上图这样的错,可以去掉--add Component.GitHub.VisualStudio ,例如:

vs_setup.exe --layout e:\vslayout --add Microsoft.VisualStudio.Workload.CoreEditor --add Microsoft.VisualStudio.Workload.NetWeb --add Microsoft.VisualStudio.Workload.Python --add Microsoft.VisualStudio.Workload.Node --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --includeRecommended --lang zh-CN

按照我上面示例的命令,安装这些大概需要23GB吧,选下载后再安装

(如下图,明明不到22GB,说23GB是什么意思,原因是安装过程中肯定会有一些文件展开到系统的临时目录,肯定需要的剩余空间会大一些,我预估23GB空间都是少的,预估个25GB剩余空间比较保险)

实例中的vs_setup.exe是我自己重命名的,刚下载的文件名字很长,你可以重命名成简单的名字,layout的路径也可以自定义

刚回车如上图

自动下载的第一个文件夹就是证书,里面有3个证书

整体来说,在云服务器上下载挺快的,15:04刚回车,15:14就已经快75%的下载进度了,10分钟下载了3/4,后来到95%进度时卡住了一段时间。如果中途你看到卡住不动了,其实没卡住,你要保持耐心,最多1个小时就下载完了。如果你下载的是完整版,我实测了下,差不多得花20个小时以上。

下载完以后在layout目录有几个json文件,如果你想通过--add新增其他的模块或者就想去掉几个-add模块,你不用删layout里面已经下载好的文件夹,在重新执行命令之前得删掉layout目录这几个json文件就行。

{ "installChannelUri":".\ChannelManifest.json", "channelUri":"https://aka.ms/vs/16/release/channel", "installCatalogUri":".\Catalog.json", "channelId":"VisualStudio.16.Release", "productId":"Microsoft.VisualStudio.Product.Community", "add":[ "Component.GitHub.VisualStudio;includeRecommended", "Microsoft.VisualStudio.Workload.CoreEditor;includeRecommended", "Microsoft.VisualStudio.Workload.ManagedDesktop;includeRecommended", "Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended", "Microsoft.VisualStudio.Workload.NetWeb;includeRecommended", "Microsoft.VisualStudio.Workload.Node;includeRecommended", "Microsoft.VisualStudio.Workload.Python;includeRecommended", "Microsoft.VisualStudio.Workload.Universal;includeRecommended"     ], "addProductLang":[ "zh-CN"     ] }

【命令解析】

--layout e:\vslayout是指定离线文件存放位置,每一个Workload都必须用--add隔离

--includeRecommended顾名思义就是推荐安装,一般情况用这个参数就行

我一般选--includeRecommended这个参数,要不然太大,硬盘放不下,我的SSD硬盘只有256G(实际要打个(1000/1024)^3的折扣),平时就没多少空间可用。另外就是太费时间了。

你知道完整安装VS2019需要多大空间吗?140GB,不算离线文件的35GB,耗费180G空间,很多很多时间。

命令2:进入离线文件目录进行安装

cd /d 离线文件目录

执行如下命令之前先考虑下你要不要换默认安装路径

另外就是

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

必须在执行命令之前导入之前说的3个证书

vs_setup.exe --add Microsoft.VisualStudio.Workload.CoreEditor --add Microsoft.VisualStudio.Workload.NetWeb --add Microsoft.VisualStudio.Workload.Python --add Microsoft.VisualStudio.Workload.Node --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --add Component.GitHub.VisualStudio --includeRecommended -path install="e:\vslayout" --installPath="C:\VS2019" --path cache="C:\VS\cache" --path shared="C:\VS\shared"

如果是vs其他版本,比如vs2022,我们可以适当调整下目录名称比如

vs_setup.exe --add Microsoft.VisualStudio.Workload.CoreEditor --add Microsoft.VisualStudio.Workload.NetWeb --add Microsoft.VisualStudio.Workload.Python --add Microsoft.VisualStudio.Workload.Node --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --add Component.GitHub.VisualStudio --includeRecommended -path install="e:\vslayout" --installPath="C:\VS2022" --path cache="C:\VS\cache" --path shared="C:\VS\shared"

参数安装示例:https://docs.microsoft.com/zh-cn/visualstudio/install/command-line-parameter-examples?view=vs-2019

你自己可以--installPath指定安装位置,但不要跟上面下载离线文件时layout指定的路径重叠

总结:如果你安装失败了或者遇到异常了,建议你卸载后清理注册表然后重装

注意:-installPath指定将软件安装到的位置

假如你layout离线文件到e:\vslayout了,你同时指定--installPath="e:\vslayout" 和--path cache="e:\vslayout\cache"会报错“根安装路径不能与包缓存路径重叠”,同时指定--installPath="e:\vslayout"和--path shared="e:\vslayout\shared"会报错“根安装路径不能与共享安装路径重叠”。因此我们换个位置用 -path install="e:\vslayout" --installPath="C:\VS2019" --path cache="C:\VS\cache" --path shared="C:\VS\shared"

最后提醒一下,这样安装完的Python没有环境变量,需要你自己加一下环境变量,且Node.js的编译环境并没有安装,需要你自己去Node.js的官网下载LTS版本进行安装。

腾讯云Node.js 需要7.10.1 及以上版本 (后来更新成“腾讯云Node.js SDK需要Node.js 10.0.0 及以上版本”)

https://nodejs.org/en/download/releases/

≥7.10.1的LTS版本摘录如下,我用的[min,max]两头的版本之一。

https://nodejs.org/download/release/v8.9.0/node-v8.9.0-x64.msi

https://nodejs.org/download/release/v8.9.0/node-v8.9.0-x86.msi

https://nodejs.org/download/release/v12.16.1/node-v12.16.1-x64.msi

https://nodejs.org/download/release/v12.16.1/node-v12.16.1-x86.msi

此句为更新:现在腾讯云nodejs sdk要求Node.js 10.0.0 版本及以上。

此句为更新:现在腾讯云nodejs sdk要求Node.js 10.0.0 版本及以上。

此句为更新:现在腾讯云nodejs sdk要求Node.js 10.0.0 版本及以上。

具体以https://cloud.tencent.com/document/sdk/Node.js 为准

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 命令1:下载离线文件
    • vs_setup.exe --layout e:\vslayout --add Microsoft.VisualStudio.Workload.CoreEditor --add Microsoft.VisualStudio.Workload.NetWeb --add Microsoft.VisualStudio.Workload.Python --add Microsoft.VisualStudio.Workload.Node --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --add Component.GitHub.VisualStudio --includeRecommended --lang zh-CN
      • vs_setup.exe --layout e:\vslayout --add Microsoft.VisualStudio.Workload.CoreEditor --add Microsoft.VisualStudio.Workload.NetWeb --add Microsoft.VisualStudio.Workload.Python --add Microsoft.VisualStudio.Workload.Node --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --includeRecommended --lang zh-CN
      • 命令2:进入离线文件目录进行安装
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 必须在执行命令之前导入之前说的3个证书
      • 总结:如果你安装失败了或者遇到异常了,建议你卸载后清理注册表然后重装
      相关产品与服务
      云服务器
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档