O patch de .NET Framework falha com um erro: o acesso é negado ou o arquivo em uso

Este artigo ajuda você a resolve o problema em que a Microsoft .NET Framework falhas de patch quando os assemblies estão em uso ou bloqueados quando um patch é aplicado.

Versão original do produto: .NET Framework
Número de KB original: 2263996

Sintomas

Se um arquivo de assembly no GAC (Cache de Acesso Global) tiver sido bloqueado ou estiver em uso, ele poderá fazer com que .NET Framework patches falhem. Esse problema pode ser exacerbado por um bug na maneira como a fusão lida com a reversão e pode fazer com que os arquivos sejam excluídos. Isso resultará em aplicativos gerenciados (aqueles aplicativos que dependem de assemblies de estrutura) para falhar.

O log do MSI Verbose de patch com falha pode conter algo assim:

'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\system.dll' por causa do erro do sistema:O acesso é negado.
22/06/10 11:57:26 DDSet_Status: Dormindo 100ms...
MSI (s) (54!70) [11:57:26:738]: Produto: Microsoft .NET Framework 2.0 Service Pack 2 -- Há um problema com esse pacote do Instalador do Windows.
Consulte o log de configuração para obter mais informações.
Há um problema com esse pacote do Windows Installer.
Consulte o log de configuração para obter mais informações.
22/06/10 11:57:26 DDSet_CARetVal: 0
22/06/10 11:57:26 DDSet_Exit: InstallAssembly terminou com o valor de retorno 1603
MSI (s) (54:94) [11:57:26:758]: O valor da política de usuário 'DisableRollback' é 0
MSI (s) (54:94) [11:57:26:758]: O valor da política de máquina 'DisableRollback' é 0
A ação terminou às 11:57:26: InstallExecute. Valor de retorno 3.

Ou

22/02/10 08:38:32 DDSet_Status: Dormindo 100ms...
22/02/10 08:38:32 DDSet_Error: Falha ao instalar o assembly
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll. IAssemblyCache-InstallAssembly>() retornou -2147024864.
22/02/10 08:38:32 DDSet_Error: Falha ao instalar o assembly
'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll' devido a um erro do sistema:
O processo não pode acessar o arquivo porque ele está sendo usado por outro processo.

Motivo

Se os assemblies estiverem em uso ou bloqueados quando um patch for aplicado, o patch falhará.

Resolução

Esse problema pode ser evitado garantindo que os processos não estejam em execução que possam colocar um bloqueio nos assemblies.

Para detectar se os assemblies estão sendo usados, siga estas etapas:

  1. Baixe procexp.exe para descobrir o processo que está bloqueando assemblies.

  2. Inicie procexp.exe e pressione Ctrl+F para abrir a janela Process Explorer Search.

  3. Na caixa de texto Manipular ou DLL, digite Assembly e selecione Pesquisar.

    A captura de tela mostra as etapas para pesquisar o assembly.

  4. Todos os arquivos listados podem ter um impacto na instalação do patch. Encerre todos os processos listados ou feche os aplicativos associados. Para fazer isso, siga estas etapas:

    1. Selecione o nome do processo que você deseja encerrar na janela Process Explorer Search para localizar o processo.

    2. Clique com o botão direito do mouse no nome do processo no painel Processo .

    3. Selecione Matar Processo para encerrar o Processo.

      A captura de tela mostra as etapas para matar um processo.