La mise à jour corrective du .NET Framework échoue avec une erreur : Accès refusé ou Fichier en cours d’utilisation

Cet article vous aide à résoudre le problème des échecs de mise à jour corrective de Microsoft .NET Framework lorsque des assemblys sont en cours d’utilisation ou verrouillés lorsqu’un correctif est appliqué.

Version d’origine du produit : .NET Framework
Numéro de la base de connaissances d’origine : 2263996

Symptômes

Si un fichier d’assembly dans le Global Access Cache (GAC) a été verrouillé ou est en cours d’utilisation, cela peut entraîner l’échec des correctifs .NET Framework. Ce problème peut être exacerbé par un bogue dans la façon dont fusion gère la restauration et peut entraîner la suppression de fichiers. Cela entraîne l’échec des applications managées (celles qui dépendent d’assemblys d’infrastructure).

Le journal détaillé MSI qui a échoué peut contenir quelque chose comme ceci :

« C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\system.dll » en raison d’une erreur système : l’accès est refusé.
22/06/10 11 :57 :26 DDSet_Status : Sleeping 100 ms...
MSI (s) (54 !70) [11 :57 :26 :738] : Produit : Microsoft .NET Framework 2.0 Service Pack 2 -- Il existe un problème avec ce package Windows Installer.
Pour plus d’informations, reportez-vous au journal d’installation.
Il y a un problème avec ce package Windows Installer.
Pour plus d’informations, reportez-vous au journal d’installation.
22/06/10 11 :57 :26 DDSet_CARetVal : 0
22/06/10 11 :57 :26 DDSet_Exit : InstallAssembly s’est terminé avec la valeur de retour 1603
MSI (s) (54 :94) [11 :57 :26 :758] : la valeur de stratégie utilisateur « DisableRollback » est 0
MSI (s) (54 :94) [11 :57 :26 :758] : la valeur de stratégie de machine « DisableRollback » est 0
L’action s’est terminée 11 :57 :26 : InstallExecute. Valeur de retour 3.

Ou

22/02/10 08 :38 :32 DDSet_Status : Sleeping 100 ms...
22/02/10 08 :38 :32 DDSet_Error : Échec de l’installation de l’assembly
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll. IAssemblyCache-InstallAssembly>() a retourné -2147024864.
22/02/10 08 :38 :32 DDSet_Error : Échec de l’installation de l’assembly
'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll' en raison d’une erreur système :
Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus.

Cause

Si des assemblys sont en cours d’utilisation ou verrouillés lorsqu’un correctif est appliqué, le correctif échoue.

Résolution

Ce problème peut être évité en veillant à ce que les processus qui peuvent placer un verrou sur les assemblys ne sont pas en cours d’exécution.

Pour détecter si des assemblys sont utilisés, procédez comme suit :

  1. Téléchargez procexp.exe pour découvrir le processus qui verrouille les assemblys.

  2. Lancez procexp.exe, puis appuyez sur Ctrl+F pour ouvrir la fenêtre Traiter Explorer rechercher.

  3. Dans la zone de texte Handle ou DLL sous-chaîne , tapez Assembly , puis sélectionnez Rechercher.

    Capture d’écran montrant les étapes de recherche dans l’assembly.

  4. Tous les fichiers répertoriés peuvent avoir un impact sur l’installation du correctif. Arrêtez tous les processus répertoriés ou fermez les applications associées. Pour cela, procédez comme suit :

    1. Sélectionnez le nom du processus que vous souhaitez terminer dans la fenêtre Processus Explorer recherche pour localiser le processus.

    2. Cliquez avec le bouton droit sur le nom du processus dans le volet Processus .

    3. Sélectionnez Kill Process (Arrêter le processus ) pour arrêter le processus.

      Capture d’écran montrant les étapes permettant d’arrêter un processus.