最近接触到了好几例NET Framework的Security and Monthly Rollup补丁安装失败的情况,仔细看去,主要是KB4457918和KB4471987这两个微软2018年12月的补丁。一般情况下,我们会通过Windows Update(WU)的推荐来自动安装补丁,安装补丁成功后,会在WU的View update history中看到安装成功的提示。于此同时,应该在Installed updates中能够看到相应的补丁。如果WU或者WSUS(Windows Server Update Services)安装补丁失败,则会在history中显示失败状态。在这种时候,我们就应该尝试手动安装失败的补丁。从微软的Microsoft Update Catalog中找到相应补丁,下载并尝试安装。

一般的补丁应该会有与KB名字相符的.msu文件或是.exe文件,下载后直接双击就应该可以执行。但这次提到的KB4457918和KB4471987则比较特殊,它们都是由五个不同的部分组成的。以KB4457918为例来说,我们可以再Microsoft Update Catalog中找到KB4457918( https://www.catalog.update.microsoft.com/Search.aspx?q=KB4457918 )
在这里插入图片描述
因为案例发生在Windows Server 2008 R2 x64上,所以我们选择最后一个。前面红框部分的链接可以看到此KB的一些相关信息,点击Download按钮在弹出的窗口中发现此KB有五个部分组成,那么我们应当怎样手动安装这些部分呢,是需要全部安装吗?
在这里插入图片描述
实际上是不需要的,而且是做不到的。继续以KB4457918为例:

第一个mispatchregfix文件是 Microsoft .NET Framework Registration Correction Tool ,用于WSUS或WU安装时候寻找环境信息并进行匹配的文件,我个人觉得可能还会在安装后在view update history中记录安装的状态。这个程序在手动安装的时候是无效的,会显示如下错误。
在这里插入图片描述

第二个KB4457044,是 .NET Framework 3.5对应版本的升级补丁。一般Windows Server 2008 R2之后版本的OS都是内置此版本的 .NET,所以这个补丁一般都是可以顺利安装的。

第三个ndp45-kb4457038是 NET 4.5版本对应的升级补丁。

第四个ndp46-kb4457035是 NET 4.6及以上版本对应的升级补丁。

第五个kb4019990是KB4457918的前置条件,一般都可以安装成功。

这里要说的就是ndp45和ndp46这两个补丁,因为NET Framework从4.5.2以后的版本都是累进升级的,就是说升级到更高级版本会覆盖低版本的NET Framework。举例来说,你电脑上原来有4.5.2,升级4.7.2之后就会覆盖掉4.5.2,此时再安装4.5.2会提示你本机已经有了更高版本的NET,不允许安装低版本的。所以ndp45和ndp46这两个补丁只有一个能够安装上。

举例来说,我配置了一台电脑,环境为Windows Server 2008 R2 x64, NET Framework 4.7.2。这样在手动安装KB4457918时只能安装上第二个,第四个和第五个补丁,安装完成后,installed updates中有这三个补丁,但是在view update history中不会显示KB4457918安装成功。(这也是我怀疑第一个exe文件会修改history状态的原因。)

回到补丁安装失败案例上来,弄明白了KB4457918的组成及作用原理后,查看安装补丁失败的电脑的NET Framework环境是3.5和4.7.2,然后手动安装相应的补丁时发现3.5的补丁成功,但是4.7.2的补丁ndp46失败了,错误为下图
在这里插入图片描述
这个图一般出现在NET Framework不匹配的情况下,即是说你需要安装的补丁找不到相应的NET Framework。可是从系统信息中明明看到4.7.2已经被安装了呀。查看的方法如下:
1.Check the version of OS. Run msinfo32 >c:\sysinfo and send the output file to workspace.
2.Check the version of .NET.
a. Open registry by running regedit with administrator role.
b. Map to computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5
And computer\HK EY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full

这个时候需要用到 NET Framework Repair Tool 来帮助修复我们的NET Framework。在案例中利用此工具修复之后依然无法成功安装KB,因此最后在控制面板中选择了4.7.2并repair,其实实际上相当于卸载又重装了4.7.2,问题顺利解决,KB4457918也顺利安装上了。

这个案例困扰了我很久,在解决之后回头来看,应该是NET Framework的注册信息出现了错误,原因不能确定,有可能是杀毒软件,也有可能是第三方插件,甚至有可能是安装什么程序的时候修改了注册表,导致补丁安装的时候找不到相应的NET Framework所以安装失败。当然也不排除NET Framework损坏的可能性,因此在控制面板中repair一下或是卸载重装一下,使NET Framework恢复到完好的状态,KB的安装就可以继续进行下去了。

需要补充一点的是,NET Framework的修复或重装需要重启计算机,有一些特殊的情况下无法重启作为服务器的计算机,暂时还没有想到办法去解决这个问题,只能想着做好计划,在下次需要重启之前进行修复工作。

最近接触到了好几例NET Framework的Security and Monthly Rollup补丁安装失败的情况,仔细看去,主要是KB4457918和KB4471987这两个微软2018年12月的补丁。一般情况下,我们会通过Windows Update(WU)的推荐来自动安装补丁,安装补丁成功后,会在WU的View update history中看到安装成功的提示。于此同时,应该在Insta...
. NET Framework 4.5 打 补丁 后,出现以下错误:No exports were found that match the constraint: ContractNameMicrosoft.VisualStudio.Project.IProjectServiceAccessor Required TypeIdentityMicrosoft.VisualStudio.Projec
. NET Framework 是一个由 Microsoft 公司开发的应用程序框架,它提供了一个统一的编程模型,使开发人员可以创建面向 Windows 的应用程序。. NET Framework 架构包含以下几个主要组件: 1. 公共语言运行时(CLR):CLR 是. NET Framework 的核心组件,它提供了一种在安全环境中执行代码的机制,并负责管理程序的内存、线程、异常和资源等。 2. 类库:类库是. NET Framework 提供的一组可重用的类、接口和值类型,开发人员可以使用这些类库来开发应用程序。. NET Framework 中包含了多个类库,例如 ADO. NET 、ASP. NET 、Windows Forms 和 WPF 等。 3. 语言编译器:. NET Framework 支持多种编程语言,例如 C#、VB. NET 、F# 和 C++/CLI 等,每种语言都有相应的编译器。 4. 工具集:. NET Framework 提供了一组工具集,帮助开发人员在开发、测试和部署应用程序时更加高效。例如,Visual Studio 是. NET Framework 的主要开发工具,它提供了代码编辑器、调试器、代码自动完成和项目管理等功能。 总之,. NET Framework 架构是一个完整的应用程序框架,它提供了一系列组件和工具,使开发人员可以更加轻松地开发、部署和管理 Windows 应用程序。