修补.NET Framework失败并出现错误:访问被拒绝或文件正在使用

本文可帮助你解决以下问题:当程序集正在使用时,Microsoft .NET Framework修补失败,或者在应用修补程序时锁定。

原始产品版本:.NET Framework
原始 KB 编号: 2263996

症状

如果全局访问缓存 (GAC) 中的程序集文件已被锁定或正在使用,则可能会导致.NET Framework修补程序失败。 聚变处理回滚的方式中的 bug 可能会加剧此问题,并可能导致文件被删除。 这将导致托管应用程序 (依赖于框架程序集的应用程序) 失败。

失败的修补程序 MSI 详细日志可能包含如下所示的内容:

“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\system.dll”,因为系统错误:访问被拒绝。
06/22/10 11:57:26 DDSet_Status:睡眠 100ms...
MSI (s) (54!70) [11:57:26:738]:产品:Microsoft .NET Framework 2.0 Service Pack 2 -- 此 Windows Installer 程序包存在问题。
有关详细信息,请参阅安装日志。
此 Windows Installer 包存在问题。
有关详细信息,请参阅安装日志。
06/22/10 11:57:26 DDSet_CARetVal: 0
10/06/22 11:57:26 DDSet_Exit:InstallAssembly 以返回值 1603 结束
MSI (s) (54:94) [11:57:26:758]:用户策略值“DisableRollback”为 0
MSI (s) (54:94) [11:57:26:758]:计算机策略值“DisableRollback”为 0
操作于 11:57:26 结束:InstallExecute。 返回值 3。

02/22/10 08:38:32 DDSet_Status:睡眠 100 毫秒...
02/22/10 08:38:32 DDSet_Error:无法安装程序集
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll。 IAssemblyCache-InstallAssembly> () 返回 -2147024864。
02/22/10 08:38:32 DDSet_Error:无法安装程序集
由于系统错误,“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll”:
进程无法访问该文件,因为另一个进程正在使用该文件。

原因

如果在应用修补程序时程序集正在使用或锁定,修补程序将失败。

解决方案

若要避免此问题,可以确保未运行可能会锁定程序集的进程。

若要检测是否正在使用程序集,请执行以下步骤:

  1. 下载 procexp.exe 以发现正在锁定程序集的进程。

  2. 启动 procexp.exe 然后按 Ctrl+F 打开 “进程资源管理器搜索 ”窗口。

  3. “句柄或 DLL 子字符串 ”文本框中,键入 “程序集 ”,然后选择“ 搜索”。

    屏幕截图显示了搜索程序集的步骤。

  4. 列出的所有文件都可能会影响修补程序的安装。 终止所有列出的进程或关闭关联的应用程序。 为此,请按照下列步骤操作:

    1. 在“进程 资源管理器搜索” 窗口中选择要终止的进程名称以查找进程。

    2. 右键单击“ 进程”窗格中 的进程名称。

    3. 选择“ 终止进程 ”以终止进程。

      屏幕截图显示了终止进程的步骤。