App Layering

Mensajes de integridad de capa de depuración

Cuando apagas la máquina de empaquetado y ejecutas Apagar para finalizar, se llama a uniservice.exe para obtener el estado actual de integridad de la capa. Apagar para finalizar comprueba si hay procesos requeridos aún pendientes. Si un proceso requerido no se apaga, te muestra un mensaje sobre el problema pendiente. App Layering escribe esta información en los siguientes archivos de registro:

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

No puedes saber exactamente qué archivo UniBilcLogs está usando, así que busca el que tenga la marca de tiempo más reciente. Busca “Integrity”.

Podrías pensar que puedes omitir la comprobación de integridad de la capa apagando la máquina y finalizándola. Pero si lo intentas, el dispositivo de App Layering detiene la tarea y te devuelve a la máquina de empaquetado. El script Apagar para finalizar debe completar el proceso de finalización de la capa.

Advertencias de integridad de capa

Los siguientes mensajes de integridad de capa te indican qué operaciones en cola deben completarse antes de que una capa esté lista para finalizar:

  • “Hay un script RunOnce pendiente: comprueba y reinicia la máquina de empaquetado.”
  • “Hay un reinicio posterior a la instalación pendiente: comprueba y reinicia la máquina de empaquetado.”
  • “Una operación ngen de Microsoft está en curso en segundo plano.”
  • “Una operación de instalación de MSI está en curso: comprueba la máquina de empaquetado.”
  • “Hay un reinicio pendiente para actualizar los controladores en el disco de arranque: comprueba y reinicia la máquina de empaquetado.”
  • “Se necesita una operación ngen de Microsoft.”
  • “Software Center Client está configurado para ejecutarse, pero el SMSCFG.INI todavía está presente.”

No puedes omitir los mensajes de integridad de capa apagando la máquina. El software de App Layering se detiene y te devuelve a la máquina de empaquetado hasta que todos los procesos se hayan completado.

Si una operación NGen de Microsoft está en curso, puedes intentar acelerarla, como se describe en la siguiente sección.

“Hay un script RunOnce pendiente”

Cuando creas una capa o le agregas una versión, puedes especificar un script para que se ejecute la primera vez que un usuario inicie sesión después de que su escritorio se inicie (o se reinicie). Por ejemplo, puedes usar un script Run Once para completar la configuración de una aplicación. Un script Run Once es un archivo .cmd o .bat instalado en una capa.

Después de que un script Run Once se ejecuta en una imagen, Windows normalmente elimina las claves de Registro asociadas cuando se reinicia. Este mensaje te indica que Windows no eliminó una clave para un script Run Once de una de estas ubicaciones:

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

Para solucionar este problema:

  • Si el archivo de script ya no existe, elimina la clave de Registro.
  • Si el script referenciado en el mensaje existe, ejecuta manualmente el script y luego elimina la clave de Registro.

“Hay un reinicio posterior a la instalación pendiente”

Este mensaje se origina en cualquiera de las siguientes claves de registro:

  • 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 ves una de estas entradas, comienza reiniciando. Reinicia varias veces si es necesario, hasta que estés seguro de que el mensaje no es una solicitud de reinicio real de algún software.

  2. Si el problema es con Net Logon, reinicia el Unidesk Service for Message Management.

  3. Comprueba la existencia de una de las tres primeras claves de Registro de la lista anterior:

    • 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. Modifica manualmente cualquiera de estas claves para que se adapten a tus necesidades. Si no necesitas las claves, puedes eliminarlas.

  5. Busca cambios en la clave NetLogon para ver si:

    • El valor es diferente de lo que era al inicio.
    • El nombre del equipo es diferente al nombre del equipo activo.

    Si hay una discrepancia, corrige la configuración.

  6. Determina si una operación de unión a dominio todavía está esperando un reinicio.

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

    No puedes modificar estas tres claves de Registro, pero algunos programas pueden modificar la clave NETLOGON\Start en cada reinicio.

Después de limpiar las tres primeras claves enumeradas en el paso 1 y aún recibes el mensaje al reiniciar, puedes optar por ignorar las comprobaciones de integridad de la capa. Sin embargo, este es un último recurso y normalmente no se recomienda. Para obtener detalles sobre cómo ignorar las comprobaciones de integridad de la capa, consulta la sección “Último recurso” al final de este artículo.

“Una operación ngen de Microsoft está en curso en segundo plano”

Este mensaje te indica que una operación NGEN en primer plano o en segundo plano todavía está en curso. Una operación NGEN es donde los ensamblados de .Net se compilan en imágenes nativas. El mensaje significa que el proceso todavía está en curso. Puedes observar el progreso.

Advertencia:

No reinicies, porque puede hacer que el proceso vuelva a empezar.

Para observar el progreso en primer plano, ejecuta ngen eqi 3. O bien, espera y ejecuta ngen queue status periódicamente para ver cómo progresa el proceso. Ten en cuenta que ejecutar ngen queue status ralentiza el proceso en segundo plano, porque el proceso en segundo plano se pausa cada vez que compruebas su estado en primer plano.

Es importante dejar que los procesos NGEN terminen. Ten paciencia. Si terminas el proceso o reinicias a la mitad, puedes terminar con ensamblados de .Net escritos parcialmente.

Si un proceso en segundo plano, como MSCORSVW.EXE (el Servicio de optimización de tiempo de ejecución de NET) no ha terminado en un día, busca procesos en segundo plano inactivos. Un reinicio podría ayudar.

Una vez que los siguientes servicios hayan terminado de ejecutarse, puedes continuar:

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

“Una operación de instalación de MSI está en curso”

Este mensaje indica que existe un mutex del sistema (objeto de exclusión mutua) llamado Global\_MSIExecute. El instalador de MSI usa Global\_MSIExecute para garantizar que solo se ejecute un instalador a la vez. Si estás seguro de que no hay instalaciones de MSI en curso, podría haber un bloqueo en un recurso. Vuelve a la capa y averigua qué proceso está bloqueado.

“Hay un reinicio pendiente para actualizar los controladores en el disco de arranque”

Este mensaje te indica que un servicio o controlador configurado para iniciarse en el arranque del sistema fue modificado o instalado. Es importante que el controlador modificado pueda arrancar correctamente.

Normalmente, solo necesitas reiniciar una vez y el controlador funciona bien. En algunas ocasiones, hemos visto software (como Microsoft Defender o McAfee) intentar modificar su archivo de controlador en cada arranque, lo que desencadena esta comprobación de integridad cada vez. Ningún reinicio lo borra. Es posible que debas usar la opción de omitir la comprobación de integridad de la capa, como se explica en la sección siguiente, “Último recurso”.

“Se necesita una operación NGen de Microsoft”

Este mensaje te indica que se instaló una aplicación en la máquina de empaquetado y que programó elementos para ser actualizados con un nivel de prioridad de 3.

En este nivel de prioridad, la operación solo se ejecuta cuando la CPU está inactiva y está esperando hasta que no haya más actividad.

Para garantizar que la aplicación se ejecute de la manera más óptima en la imagen publicada, App Layering bloquea el proceso de finalización, porque el proceso NGEN debe ejecutarse en la máquina de empaquetado, en lugar de en cada máquina donde se implementa la aplicación.

Con un NGEN eqi 3 (nivel de prioridad 3), puedes:

  • Ejecutar las operaciones sin terminar en ambos de los siguientes directorios:

    • c:\windows\microsoft.net\framework\vYY.MM.Build
    • c:\windows\microsoft.net\framework64\v4.0.30319
  • Esperar. La operación NGEN normalmente se ejecuta por sí sola después de 15 minutos de tiempo de inactividad.

Los valores que se examinan incluyen:

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

Un valor de 1 significa que hay elementos de trabajo en cola para ser procesados.

“Software Center Client está configurado para ejecutarse, pero el SMSCFG.INI todavía está presente…”

Este mensaje te indica que esta máquina tiene ccmexec.exe configurado como un servicio y que no está configurado como deshabilitado.

Dado que sabemos que cualquier capa creada en una máquina de empaquetado debe sellarse correctamente para implementarse de forma adecuada en un entorno VDI, estamos comprobando que el SMSCFG.ini no esté presente. Hay un archivo de comandos para que ejecutes al final de la capa. Hemos proporcionado los comandos para ejecutar en un archivo de comandos por lotes que puedes usar para sellar la capa. Inicia sesión en una ventana de comandos como administrador para ejecutar este script:

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

Acelerar una operación NGen de Microsoft

El ejecutable NGEN es el Generador de imágenes nativas de Microsoft. Forma parte del sistema .NET. Ngen recompila el código de bytes de .NET en imágenes nativas y construye las entradas del registro. Windows determina cuándo ejecutar NGEN basándose en lo que se está instalando y lo que Windows detecta en la configuración. Cuando NGEN se está ejecutando, siempre deja que se complete. Una operación NGEN interrumpida puede dejarte con ensamblados de .NET que no funcionan, u otros problemas en el sistema .NET.

Tienes la opción de esperar a que el proceso NGEN se complete en segundo plano, o forzarlo a primer plano. También puedes comprobar el estado de la operación NGEN, como se describe en los siguientes pasos. Sin embargo, cada vez que compruebas el estado de la cola, estás creando actividad en primer plano, lo que podría hacer que el procesamiento en segundo plano se pause temporalmente.

Llevar el proceso NGEN a primer plano te permite ver el progreso. Puedes finalizar la capa cuando el proceso esté completo.

  1. Lleva una operación NGEN a primer plano. Normalmente, NGEN es una operación en segundo plano y se pausa si hay actividad en primer plano. Llevar la tarea a primer plano puede ayudar a que la tarea se complete lo más rápido posible. Para ello:
    1. Abre un símbolo del sistema como administrador.
    2. Ve al directorio de Microsoft .NET Framework para la versión actualmente en uso:

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

    3. Introduce el comando NGEN para ejecutar los elementos en cola: ngen eqi 3 <!--NeedCopy-->
    4. Esto lleva la tarea NGEN a primer plano en el símbolo del sistema y enumera los ensamblados que se están compilando.

      Nota:

      Si recibes varios mensajes de “error de compilación”, busca en el Administrador de tareas para ver si hay una instancia de MSCORSVW.EXE en ejecución. Si es así, permite que se complete o vuelve a ejecutar NGEN eqi 3. No reinicies para detener la tarea. La tarea debe completarse.

  2. Comprueba el estado de una operación NGEN
    1. Abre un símbolo del sistema como administrador.
    2. Comprueba el estado ejecutando este comando: NGEN queue status
    3. Cuando recibas el siguiente estado, el NGEN estará completo y podrás finalizar la capa. El .NET Runtime Optimization Service está detenido.

Último recurso para manejar un problema de integridad de capa (NO recomendado)

Si tienes una capa que simplemente no puede finalizar, puedes usar una clave de Registro para indicar a esa capa que ignore sus comprobaciones de integridad.

Advertencia: ¡Usa esta clave solo como último recurso! App Layering te impide finalizar en estas circunstancias. Permitir la finalización de una capa puede dañar irreparablemente tanto la capa como las imágenes que la incluyen. ¡Siempre intenta resolver el problema dentro de Windows primero!

Para ignorar los mensajes de integridad de capa en una capa (no recomendado):

  1. Ejecuta regedit.exe y crea esta clave:

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

    El valor no importa. Lo que importa es que el valor exista. Este paso bloquea las comprobaciones de integridad de la capa. Permite que la capa se finalice, independientemente del daño que pueda causar a la capa y a las imágenes en capas que la incluyen.