App Layering

Messages d’intégrité de couche de débogage

Lorsque vous arrêtez la machine de packaging et exécutez Arrêter pour finaliser, uniservice.exe est appelé pour obtenir l’état d’intégrité actuel de la couche. Arrêter pour finaliser vérifie si des processus requis sont toujours en attente. Si un processus requis ne s’arrête pas, un message concernant le problème en attente s’affiche. App Layering écrit ces informations dans les fichiers journaux suivants :

C:\Program Files\Unidesk\Uniservice\Log\LayerIntegrity.txt C:\Program Files\Unidesk\Uniservice\Log\UniBilcLogs_X.txt

Vous ne pouvez pas savoir exactement quel fichier UniBilcLogs est utilisé. Recherchez donc celui dont l’horodatage est le plus récent. Recherchez « Integrity ».

Vous pourriez penser pouvoir contourner la vérification de l’intégrité de la couche en arrêtant la machine et en la finalisant. Mais si vous essayez, l’appliance App Layering arrête la tâche et vous ramène à la machine de packaging. Le script Arrêter pour finaliser doit terminer le processus de finalisation de la couche.

Avertissements d’intégrité de couche

Les messages d’intégrité de couche suivants vous indiquent les opérations en file d’attente qui doivent être terminées avant qu’une couche ne soit prête à être finalisée :

  • « Un script RunOnce est en attente – veuillez vérifier et redémarrer la machine de packaging. »
  • « Un redémarrage post-installation est en attente – veuillez vérifier et redémarrer la machine de packaging. »
  • « Une opération ngen de Microsoft est en cours en arrière-plan. »
  • « Une opération d’installation MSI est en cours – veuillez vérifier la machine de packaging. »
  • « Un redémarrage est en attente pour mettre à jour les pilotes sur le disque de démarrage – veuillez vérifier et redémarrer la machine de packaging. »
  • « Une opération ngen de Microsoft est nécessaire. »
  • « Le client Software Center est configuré pour s’exécuter, mais le fichier SMSCFG.INI est toujours présent. »

Vous ne pouvez pas contourner les messages d’intégrité de couche en arrêtant la machine. Le logiciel App Layering s’arrête et vous ramène à la machine de packaging jusqu’à ce que tous les processus soient terminés.

Si une opération NGen de Microsoft est en cours, vous pouvez essayer de l’accélérer, comme décrit dans la section suivante.

« Un script RunOnce est en attente »

Lorsque vous créez une couche ou y ajoutez une version, vous pouvez spécifier un script à exécuter la première fois qu’un utilisateur se connecte après le démarrage (ou le redémarrage) de son bureau. Par exemple, vous pouvez utiliser un script Run Once pour terminer la configuration d’une application. Un script Run Once est un fichier .cmd ou .bat installé sur une couche.

Après l’exécution d’un script Run Once sur une image, Windows supprime normalement les clés de Registre associées lors du redémarrage. Ce message vous indique que Windows n’a pas supprimé une clé pour un script Run Once de l’un de ces emplacements :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce

Pour résoudre ce problème :

  • Si le fichier de script n’existe plus, supprimez la clé de Registre.
  • Si le script référencé dans le message existe, exécutez-le manuellement, puis supprimez la clé de Registre.

« Un redémarrage post-installation est en attente »

Ce message provient de l’une des clés de Registre suivantes :

  • HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired
  • HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\NETLOGON\Start
  • HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\ACTIVECOMPUTERNAME
  • HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\COMPUTERNAME
  1. Si vous voyez l’une de ces entrées, commencez par redémarrer. Redémarrez plusieurs fois si nécessaire, jusqu’à ce que vous soyez certain que le message n’est pas une véritable demande de redémarrage par un logiciel.

  2. Si le problème concerne Net Logon, redémarrez le service Unidesk Service for Message Management.

  3. Vérifiez l’existence de l’une des trois premières clés de Registre de la liste précédente :

    • HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired
  4. Modifiez manuellement l’une de ces clés selon vos besoins. Si vous n’avez pas besoin des clés, vous pouvez les supprimer.

  5. Recherchez les modifications dans la clé NetLogon, pour voir si :

    • La valeur est différente de celle qu’elle était au démarrage.
    • Le nom de l’ordinateur est différent du nom d’ordinateur actif.

    S’il y a une divergence, corrigez le paramètre.

  6. Déterminez si une opération de jonction de domaine est toujours en attente d’un redémarrage.

    • HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\NETLOGON\Start
    • HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\ACTIVECOMPUTERNAME
    • HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\COMPUTERNAME

    Vous ne pouvez pas modifier ces trois clés de Registre, mais certains logiciels peuvent modifier la clé NETLOGON\Start à chaque redémarrage.

Après avoir nettoyé les trois premières clés répertoriées à l’étape 1, si vous recevez toujours l’invite au redémarrage, vous pouvez choisir d’ignorer les vérifications d’intégrité de couche. Il s’agit cependant d’un dernier recours et n’est normalement pas recommandé. Pour plus de détails sur la façon d’ignorer les vérifications d’intégrité de couche, consultez la section « Dernier recours » à la fin de cet article.

« Une opération ngen de Microsoft est en cours en arrière-plan »

Ce message vous indique qu’une opération NGEN de premier plan ou d’arrière-plan est toujours en cours. Une opération NGEN est le processus par lequel les assemblys .Net sont compilés en images natives. Le message signifie que le processus est toujours en cours. Vous pouvez suivre la progression.

Avertissement :

Ne redémarrez pas, car cela pourrait faire redémarrer le processus.

Pour suivre la progression en premier plan, exécutez ngen eqi 3. Ou, attendez et exécutez ngen queue status périodiquement pour voir comment le processus progresse. Gardez à l’esprit que l’exécution de ngen queue status ralentit le processus d’arrière-plan, car le processus d’arrière-plan se met en pause chaque fois que vous vérifiez son état en premier plan.

Il est important de laisser les processus NGEN se terminer. Soyez patient. Si vous terminez le processus ou redémarrez au milieu, vous risquez de vous retrouver avec des assemblys .Net partiellement écrits.

Si un processus d’arrière-plan, tel que MSCORSVW.EXE (le service d’optimisation du runtime NET), n’est pas terminé dans la journée, vérifiez les processus d’arrière-plan obsolètes. Un redémarrage pourrait aider.

Une fois les services suivants terminés, vous pouvez continuer :

  • ngen.exe
  • ngentask.exe
  • mscorsvw.exe

« Une opération d’installation MSI est en cours »

Ce message indique qu’un mutex système (objet d’exclusion mutuelle) nommé Global\_MSIExecute existe. L’installateur MSI utilise Global\_MSIExecute pour s’assurer qu’un seul installateur s’exécute à la fois. Si vous êtes certain qu’aucune installation MSI n’est en cours, il pourrait y avoir un verrou sur une ressource. Retournez dans la couche et déterminez quel processus est verrouillé.

« Un redémarrage est en attente pour mettre à jour les pilotes sur le disque de démarrage »

Ce message vous indique qu’un service ou un pilote configuré pour démarrer au démarrage du système a été modifié ou installé. Il est important que le pilote modifié puisse démarrer avec succès.

Normalement, vous devez redémarrer une fois, et le pilote fonctionne correctement. Nous avons parfois vu des logiciels (comme Microsoft Defender ou McAfee) tenter de modifier leur fichier de pilote à chaque démarrage, déclenchant cette vérification d’intégrité à chaque fois. Aucun redémarrage ne résout le problème. Vous devrez peut-être utiliser l’option de contournement de la vérification d’intégrité de couche, comme expliqué dans la section ci-dessous, « Dernier recours ».

« Une opération NGen de Microsoft est nécessaire »

Ce message vous indique qu’une application a été installée sur la machine de packaging et qu’elle a planifié des éléments à mettre à jour avec un niveau de priorité de 3.

À ce niveau de priorité, l’opération ne s’exécute que lorsque le processeur est inactif, et elle attend qu’il n’y ait plus d’activité.

Pour garantir que l’application s’exécute de manière optimale sur l’image publiée, App Layering bloque le processus de finalisation, car le processus NGEN doit s’exécuter sur la machine de packaging, plutôt que sur chaque machine où l’application est déployée.

Avec un NGEN eqi 3 (niveau de priorité 3), vous pouvez soit :

  • Exécuter les opérations inachevées dans les deux répertoires suivants :

    • c:\windows\microsoft.net\framework\vYY.MM.Build
    • c:\windows\microsoft.net\framework64\v4.0.30319
  • Attendre. L’opération NGEN s’exécute généralement d’elle-même après 15 minutes d’inactivité.

Les valeurs examinées incluent :

  • HKLM\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\NGenService\Roots\WorkPending
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727\NGenService\Roots\WorkPending

Une valeur de 1 signifie qu’il y a des éléments de travail en file d’attente à traiter.

« Le client Software Center est configuré pour s’exécuter, mais le fichier SMSCFG.INI est toujours présent… »

Ce message vous indique que cette machine a ccmexec.exe configuré comme un service et qu’il n’est pas configuré comme désactivé.

Puisque nous savons que toutes les couches créées sur une machine de packaging doivent être correctement scellées pour être déployées correctement dans un environnement VDI, nous vérifions que le fichier SMSCFG.ini n’est pas présent. Il existe un fichier de commande à exécuter à la toute fin de la couche. Nous avons fourni les commandes à exécuter dans un fichier de commandes batch que vous pouvez utiliser pour sceller la couche. Connectez-vous à une fenêtre de commande en tant qu’administrateur pour exécuter ce script :

c:\windows\setup\scripts\SEALSCCMCLIENT.cmd

Accélérer une opération NGen de Microsoft

L’exécutable NGEN est le générateur d’images natives de Microsoft. Il fait partie du système .NET. Ngen recompile le bytecode .NET en images natives et construit les entrées de Registre. Windows détermine quand exécuter NGEN en fonction de ce qui est installé et de ce que Windows détecte dans la configuration. Lorsque NGEN est en cours d’exécution, laissez-le toujours se terminer. Une opération NGEN interrompue peut entraîner des assemblys .NET non fonctionnels ou d’autres problèmes dans le système .NET.

Vous avez le choix d’attendre que le processus NGEN se termine en arrière-plan, ou de le forcer au premier plan. Vous pouvez également vérifier l’état de l’opération NGEN, comme décrit dans les étapes suivantes. Cependant, chaque fois que vous vérifiez l’état de la file d’attente, vous créez une activité de premier plan, ce qui pourrait entraîner la pause temporaire du traitement en arrière-plan.

Le fait de ramener le processus NGEN au premier plan vous permet de visualiser la progression. Vous pouvez finaliser la couche lorsque le processus est terminé.

  1. Ramenez une opération NGEN au premier plan. Normalement, NGEN est une opération d’arrière-plan et se met en pause s’il y a une activité de premier plan. Le fait de ramener la tâche au premier plan peut aider la tâche à se terminer le plus rapidement possible. Pour ce faire :
    1. Ouvrez une invite de commandes en tant qu’administrateur.
    2. Accédez au répertoire Microsoft .NET Framework pour la version actuellement utilisée :

      cd C:\Windows\Microsoft.NET\FrameworkNN\vX.X.XXXXX

    3. Entrez la commande NGEN pour exécuter les éléments en file d’attente : ngen eqi 3 <!--NeedCopy-->
    4. Cela ramène la tâche NGEN au premier plan dans l’invite de commandes et liste les assemblys en cours de compilation.

      Remarque :

      Si vous recevez plusieurs messages « compilation failed », vérifiez dans le Gestionnaire des tâches si une instance de MSCORSVW.EXE est en cours d’exécution. Si c’est le cas, laissez-la se terminer ou réexécutez NGEN eqi 3. Ne redémarrez pas pour arrêter la tâche. La tâche doit se terminer.

  2. Vérifiez l’état d’une opération NGEN
    1. Ouvrez une invite de commandes en tant qu’administrateur.
    2. Vérifiez l’état en exécutant cette commande : NGEN queue status
    3. Lorsque vous recevez l’état suivant, l’opération NGEN est terminée et vous pouvez finaliser la couche. Le service d’optimisation du runtime .NET est arrêté.

Dernier recours pour gérer un problème d’intégrité de couche (NON recommandé)

Si vous avez une couche qui ne peut tout simplement pas être finalisée, vous pouvez utiliser une clé de Registre pour indiquer à cette couche d’ignorer ses vérifications d’intégrité de couche.

Avertissement : N’utilisez cette clé qu’en dernier recours ! App Layering vous empêche de finaliser dans ces circonstances. Vous permettre de finaliser une couche peut nuire irrémédiablement à la fois à la couche et aux images qui incluent la couche. Essayez toujours de résoudre le problème dans Windows en premier lieu !

Pour ignorer les messages d’intégrité de couche sur une couche (non recommandé) :

  1. Exécutez regedit.exe et créez cette clé :

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Uniservice: "BypassLayerCheck"=DWORD 1<!--NeedCopy-->

    La valeur n’a pas d’importance. Ce qui compte, c’est que la valeur existe. Cette étape bloque les vérifications d’intégrité de couche sur une couche. Elle permet de finaliser la couche, quels que soient les dommages qu’elle peut causer à la couche et aux images en couches qui l’incluent.