HOWTO: 重置 Windows 更新组件

[ 2016/09/16 23:07 | by gOxiA ]

windows-10-508x192-logo

HOWTO: 重置 Windows 更新组件

        这几天一直被 KB3189866 这个更新困扰着,两台设备都是卡在45%不再继续。像以往一样停止 Windows Update 服务去删除“SoftwareDistribution”目录发现有几个文件提示正在被使用无法删除,禁用 WU 服务重启再试无果。看来从 14393 开始 Windows Update 的运行机制发生了比较大的改变,貌似与“更新来自多个位置”有关,这个功能允许该电脑将以前下载的 Windows 更新和应用发送到本地网络上的电脑或 Internet 上的电脑,从而起到加快下载速度的目标。

        那么现在该如何正确的重置Windows更新组件呢?!首先要停止与更新相关联的所有服务,不再单单只是 Windows Update,需要停止的服务如下:

  • net stop bits
  • net stop wuauserv
  • net stop appidsvc
  • net stop cryptsvc

        然后删除更新相关目录和文件:

  • Del "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat"
  • Del “%systemroot%\SoftwareDistribution”
  • Del “%systemroot%\system32\catroot2”

        最后重新启动电脑,再次执行更新应该就能解决常见的更新故障,如果依旧有问题可以常识重置 BITS 和 WU 的安全描述符,为此执行如下命令行:

  • sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
  • sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)

        也可以常识重新注册相关服务的动态链接库:

regsvr32.exe atl.dll
regsvr32.exe urlmon.dll
regsvr32.exe mshtml.dll
regsvr32.exe shdocvw.dll
regsvr32.exe browseui.dll
regsvr32.exe jscript.dll
regsvr32.exe vbscript.dll
regsvr32.exe scrrun.dll
regsvr32.exe msxml.dll
regsvr32.exe msxml3.dll
regsvr32.exe msxml6.dll
regsvr32.exe actxprxy.dll
regsvr32.exe softpub.dll
regsvr32.exe wintrust.dll
regsvr32.exe dssenh.dll
regsvr32.exe rsaenh.dll
regsvr32.exe gpkcsp.dll
regsvr32.exe sccbase.dll
regsvr32.exe slbcsp.dll
regsvr32.exe cryptdlg.dll
regsvr32.exe oleaut32.dll
regsvr32.exe ole32.dll
regsvr32.exe shell32.dll
regsvr32.exe initpki.dll
regsvr32.exe wuapi.dll
regsvr32.exe wuaueng.dll
regsvr32.exe wuaueng1.dll
regsvr32.exe wucltui.dll
regsvr32.exe wups.dll
regsvr32.exe wups2.dll
regsvr32.exe wuweb.dll
regsvr32.exe qmgr.dll
regsvr32.exe qmgrprxy.dll
regsvr32.exe wucltux.dll
regsvr32.exe muweb.dll
regsvr32.exe wuwebv.dll

        不要忘记重置 Winsock 可以解决大部分网络访问异常的问题:

netsh winsock reset

        同时微软也为我们提供了故障诊断程序,可以自动诊断并修复问题。

windows-10-508x192-logo

HOWTO: 解决资源管理有两个 OneDrive

        上周 gOxiA 一个不小心把两个数据盘给误格了,数据损失近 2TB,整整耗费了1周的时间才将数据恢复,由于是主力机所以系统也只能重新安装,Windows 10 1607版,没想到刚安装完就发现一个问题,OneDrive 初始化设置完毕后在资源管理器中竟然看到两个图标目录,位于桌面下,十分诡异!既然是同名同路径,而且图标显示 OneDrive 的状态和右键功能都正常,说明这两个图标应该是通过注册表加载的标识符。

sp160908_160323

        标识符在系统中是具有唯一性的,否则也不可能出现两个同名图标,搜索 MSDN 了解到在注册表中 CLSID 分支存储着系统中所有 COM 类对象的数据,路径位于 “HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID}”,启动注册表编辑器定位到这个路径开始搜索关键词 OneDrive,看看会有什么收获!如下截图搜索到了很多 OneDrive 相关的标识符,其中有些 CLSID 下包含 ShellFolder 看起来挺有关联。

2016-09-10 (2)

        为了继续验证,启动了 Sysinternals 套件的 Process Monitor 工具对资源管理进行监测,因为重点怀疑的是注册表,并且问题在资源管理器中可以重现,所以进行了过滤,果然收集到了有价值的数据。从截图可以看到当 gOxiA 访问资源管理器的这两个 OneDrive 后,Process Monitor记录下了这两个图标的 CLSID,分别是:

{018D5C66-4533-4307-9B53-224DE2ED1FE6}

{D227B6E2-5C41-4EB2-BD76-51940CFD391F}

2016-09-10 (24)

2016-09-10 (26)

        既然找到了两个图标的 CLSID 那么就可以在注册表中缩小搜索范围了。继续搜索注册表锁定了问题范围,从下面截图可以看到在下面两个路径下存在 CLSID 记录,从注册表项的名称看确有关联。

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel

2016-09-10 (1)

        下来尝试修改“HideDesktopIcons”-“NewStartPanel” 下相关的 CLSID 值改为为 0,不隐藏图标进行测试。(注意:在进行注册表操作前一定要进行备份!!!)刷新桌面,可以看到出现了两个 OneDrive 图标,OK 问题可以锁定了!但奇怪的是当删除其中一个 OneDrive 的 CLSID 后,桌面仍有两个图标,而且资源管理其中也仍旧显示两个图标。尝试删除“Desktop”-“NameSpace” 下的项进行测试,发现两个图标的问题解决了!

2016-09-10 (23)

        虽然问题得到解决了,但是应该删除哪个 CLSID 呢?如何确定这两个 CLSID 哪个才是当前 OneDrive 所使用的呢?翻出之前 Process Monitor 监测的结果,可以看到 OneDrive 的配置项所在的位置。

HKEY_CURRENT_USER\SOFTWARE\Microsoft\OneDrive

        顺藤摸瓜再接再厉,找吧!

2016-09-10 (25)

        功夫不负有心人,HKEY_CURRENT_USER\SOFTWARE\Microsoft\OneDrive\Accounts\Personal,下面“NamespaceRootId”记录的 CLSID 值就是当前所使用的,至此可以收官了!

2016-09-09 (1)

        结束前做了一个小测试,删除了当前正在使用的 CLSID 项,发现从系统栏打开 OneDrive 时会报错。此外还有一个问题!虽然删除了资源管理器和桌面中的图标(注册表对应的项和值),但是监测发现,打开资源管理时还是会去读取已经删除的 CLSID,说明仍有残留,可是注册表中已经搜索不到这个 CLSID,检查 OneDrive 的配置文件仍一无所获,也许是一个 Bug 已经提交微软反馈中心,期待后续会彻底解决。(考虑重新做一遍系统,同步数据这事还是靠谱点好!!!)

 

分页: 2/2 第一页 上页 1 2 最后页 [ 显示模式: 摘要 | 列表 ]