操作系统:win10
问题背景:win10 自动更新后,打开VS报错 损坏的映像 C:\WINDOWS\system32\sfc.dll 没有指定在Windows上运行,或者它包含错误,错误状态0xc0000020。附:其他应用程序能正常运行运行(所以一度怀疑VS出现问题,可系统更新前VS2015和VS2017运行良好,中间有试着修复VS,修复后还是报不同的库的错误,才知道是系统文件的错误)
解决方案(我最后决定重装系统了):
一、网上下载或从其他运行完好的电脑上复制sfc.dll文件,替换本机文件,直接替换过程中由于权限问题又涉及到TrustedInstaller的问题,就不再累述了。
二、完全注册系统中的.dll文件 (失败!)
方法:在命令提示窗口输入
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
所有库文件重新注册后,还是报上面的错误。
在“搜索”处输入cmd,在搜索出的命令提示符处右键单击“以管理员的身份运行”,在命令提示符窗口输入:sfc/scannow命令,sfc /scannow 命令将扫描所有受保护的系统文件,并用位于 %WinDir%\System32\dllcache 的压缩文件夹中的缓存副本替换损坏的文件。%WinDir% 占位符代表 Windows 操作系统文件夹。
提示:Windows资源保护找到了损坏文件,但其中有一些文件无法修复
在命令提示符中输入以下信息,显示无法修复的文件:
findstr /c:"[SR]" %windir%\Logs\CBS\CBS.log >"%userprofile%\Desktop\sfcdetails.txt"
然后手动将损坏的文件替换完好的文件副本
1、获得损坏的系统文件的管理所有权。 为此,在提升的命令提示符处,复制并粘贴(或键入)以下命令,然后按 Enter 键:
takeown /f Path_And_File_Name
注意 Path_And_File_Name 占位符代表损坏文件的路径和文件名。 例如,键入 takeown /f C:\windows\system32\jscript.dll。
2、授予管理员完全访问损坏的系统文件的权限。 为此,复制并粘贴(或键入)以下命令,然后按 Enter 键:
icacls Path_And_File_Name /GRANT ADMINISTRATORS:F
注意 Path_And_File_Name 占位符代表损坏文件的路径和文件名。 例如,键入 icacls C:\windows\system32\jscript.dll /grant administrators:F
3、将损坏的系统文件替换为已知完好的文件副本。 为此,复制并粘贴(或键入)以下命令,然后按 Enter 键:
复制 Source_File Destination
注意 Source_File 占位符代表计算机上已知完好的文件副本的路径和文件名,Destination 占位符代表损坏文件的路径和文件名。 例如,键入 copy E:\temp\jscript.dll C:\windows\system32\jscript.dll。
然鹅还是失败!!!
四、在联网的情况下依次输入下面命令:
dism /online /cleanup-image /scanhealth
diam /online /cleanup-image /restorehealth
注意中间的空格,要是没有空格会报错。如第二张图,错误类型:87
扫描完成后,没有报错,但是VS还是打不开。修复、卸载、重装还不行,把安装过程报出的错误修改后还是打不开,再次修复,还是打开失败。已经决定重装系统了。