我的系统磁盘已损坏。我设法恢复了大部分文件,但仍有一些程序无法启动。sfc /scannow
报告称某些文件未修复,其中包括 mfc90.dll。我怀疑这就是原因。我确认 WinSxS 下有问题的文件签名不匹配,因此肯定已损坏。
在控制面板中,有多个“Microsoft Visual C++ 2008 Redistributable - x86”条目 - 不同版本。我卸载了与损坏文件的内部版本号匹配的那个,但 WinSxS 下的文件仍然存在(可能是因为它被标记为被其他程序使用)。我还尝试了几个受影响的程序的“修复”功能,但没有成功(它们因不同的原因而失败)。
我的问题:我怎样才能删除 WinSxS 文件夹下的这个 DLL 文件(在 Windows 内部),它是否安全(我有它的几个其他副本,但版本号不同。例如,损坏的版本号是 9.0.30729.4137,但 9.0.30729.4974 似乎没问题)。
我意识到我面临系统重新安装作为长期解决方案,我只需要一个快速修复以便在没有重新安装的情况下生存数周。
答案1
首先,我不知道自己在做什么,也从未成功过。无论如何我都不会这么做 :-) 如果你愿意,你可以。但这里有一些方法,没有特定的顺序,只是 Psyco,没有基于事实的解决方案。
1)它是磁盘上的损坏文件/位置吗?
1A) 使用 /r 选项在驱动器上运行 CHKDSK。
1B) 使用映像备份备份整个系统分区,无论如何你都必须有一个映像备份,以便执行我所想象的所有邪恶之举,以销毁此文件 :-) 确保验证备份并对其持肯定态度。
现在恢复该备份,这将强制重写整个系统。
1) 综上所述,有一件事是肯定的,那就是损坏不会妨碍删除。您可能知道磁盘损坏是否是问题的一部分。但为了生存,备份本身仍然需要完成。
2)共享dll
2A) 如果“sharedDlls”的使用编号大于 1 ,则无法正确卸载,这意味着上次卸载时该编号为 0 。这些编号的其中一个位置是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\SharedDLLs。
2B) 在注册表中的任何共享 dll 位置中找到文件并将它们全部丢弃,如果目的是删除/替换,那么为什么还要关心数字呢?
2C) 在注册表中的任何其他地方找到它并将其删除,这是一个较旧的 dll,并不是系统本身的一部分,所以谁在乎。
2) 我们正在尝试重新安装可再发行组件,因此我们可能不得不采取积极措施。您有上述备份,因此请撕掉它。
这仅在您尝试卸载并且使用编号阻止它时才需要,使用正确的卸载方法。
注册表中可能还有其他位置标识可再发行组件已安装,这在重新安装可再发行组件时仍可能是一个问题。
3)弄清楚它的联系
3A) 安装这个硬链接查看器“HardLinkShellExt_X64”,它将显示有多少个链接指向磁盘位置上的数据(或没有)。
3B)删除除最后一个链接之外的所有链接(这将删除数据本身)
3) 我真的不知道,但如果你设法删除磁盘上的数据,而不删除硬链接本身(这不容易做到),你最终可能会得到一个指向无处的指针。至少这个东西会显示发生了什么,以及链接是什么(或不是什么)。
4)狠狠地移除
4A) 安装名为“取得所有权”的实用程序,这可能会影响文件/文件夹的权限,因此您可以销毁具有权限的内容,以阻止管理员删除它们。如果权限阻碍删除,请在您尝试删除的文件上运行它。
4B) 安装“解锁器”,它可以解锁正在使用它的东西,甚至可以在重新启动时删除。MBAM 中的文件刺客也可以做同样的事情。这可以删除顽固的文件。如果权限有问题,你必须先处理它们。
5)在这里的某个地方,我们重新安装原始的可再发行版本
5A) 找到安装该程序的程序,首先在安装磁盘上搜索 Vcred*.*。通常在程序磁盘上的可再发行文件夹中找到。这里的想法是不要不必要地重新安装整个程序,而是重新安装损坏的重发布版本。
6)撤回图像备份,因为我错了,现在事情变得更糟了:-)
7) 当 sfc 扫描无法完成修复系统的工作时,通常“重叠安装”可以解决问题。但此项不是原始 Windows 7 安装的一部分。