Selector de shell

Con shell Launcher, puede configurar un dispositivo de pantalla completa para que use casi cualquier aplicación o ejecutable como shell personalizado. La aplicación que especifiques reemplaza el shell predeterminado (explorer.exe) que se ejecuta normalmente cuando inicia sesión el usuario.

También puede configurar Shell Launcher para iniciar diferentes aplicaciones de shell para distintos usuarios o grupos de usuarios.

Hay algunas excepciones para las aplicaciones y los ejecutables que puede usar como shell personalizado:

  • No puede usar el archivo ejecutable siguiente como shell personalizado: C:\\Windows\\System32\\Eshell.exe. El uso de Eshell.exe como shell predeterminado dará lugar a una pantalla en blanco después de que el usuario inicie sesión.
  • No puedes usar una aplicación universal de Windows como shell personalizado.
  • No se puede usar un shell personalizado para iniciar aplicaciones universales de Windows, por ejemplo, la aplicación Configuración.
  • No puede usar una aplicación que inicie un proceso diferente y salga como un shell personalizado. Por ejemplo, no se puede especificar write.exe en el iniciador de shell. Shell Launcher inicia un shell personalizado y supervisa el proceso para identificar cuándo sale el shell personalizado. Write.exe crea un proceso de wordpad.exe de 32 bits y se cierra. Dado que shell Launcher no es consciente del proceso de wordpad.exe recién creado, Shell Launcher realiza acciones basadas en el código de salida de Write.exey reinicia el shell personalizado.
  • No se puede evitar que el sistema se apague. Para Shell Launcher V1 y V2, no se puede bloquear la sesión finaliza devolviendo FALSE al recibir el mensaje WM_QUERYENDSESSION en una aplicación gráfica o devolviendo FALSE en la rutina de controlador que se agrega a través de la función SetConsoleCtrlHandler en una aplicación de consola.

Nota:

No puede configurar shell Launcher y el acceso asignado en el mismo sistema.

Usa Shell Launcher V2, puedes especificar una aplicación universal de Windows como shell personalizado. Comprueba Usar iniciador de shell para crear un quiosco de Windows 10 para conocer las diferencias entre Shell Launcher v1 y Shell Launcher V2.

Shell Launcher procesa las claves del Registro Run y RunOnce antes de iniciar el shell personalizado, por lo que el shell personalizado no necesita controlar el inicio automático de otras aplicaciones y servicios.

Shell Launcher también controla el comportamiento del sistema cuando se cierra el shell personalizado. Puede configurar el comportamiento de salida del shell si el comportamiento predeterminado no satisface sus necesidades.

Se pueden usar métodos para controlar el acceso a otras aplicaciones de escritorio y componentes del sistema, además de usar el iniciador de Shell, como, directiva de grupo, AppLocker y Mobile Administración de dispositivos

Nota:

En Shell Launcher v1, disponible en Windows 10, solo puedes especificar una aplicación de escritorio de Windows como shell de reemplazo. En Shell Launcher v2, disponible en Windows 10, versión 1809 y versiones posteriores, también puedes especificar una aplicación para UWP como shell de reemplazo.

Para usar Shell Launcher v2 en la versión 1809, debe instalar la actualización KB4551853.

Diferencias entre shell Launcher v1 y Shell Launcher v2

Shell Launcher v1 reemplaza explorer.exe, el shell predeterminado, por eshell.exe, que puede iniciar una aplicación de escritorio de Windows. Shell Launcher v2 reemplaza explorer.exe por customshellhost.exe. Este nuevo archivo ejecutable puede iniciar una aplicación de escritorio de Windows o una aplicación para UWP. Además de permitirle usar una aplicación para UWP para el shell de reemplazo, Shell Launcher v2 ofrece más mejoras:

  • Puedes usar una aplicación de escritorio personalizada de Windows que, a continuación, puede iniciar aplicaciones para UWP, como Configuración y Teclado táctil.
  • Desde un shell de UWP personalizado, puedes iniciar vistas secundarias y ejecutarse en varios monitores.
  • La aplicación de shell personalizada se ejecuta en pantalla completa y puede ejecutar otras aplicaciones en pantalla completa a petición del usuario. Para ver configuraciones XML de ejemplo para las distintas combinaciones de aplicaciones, consulte Ejemplos para shell Launcher v2.

Requisitos

Windows 10 Enterprise o Windows 10 Education.

Terminología

  • Activar y habilitar: Para que la configuración esté disponible para el dispositivo y, opcionalmente, aplique la configuración al dispositivo.
  • Configurar: Para personalizar la configuración o subconfiguración.
  • Iniciador de shell incrustado: Esta característica se denomina Iniciador de shell incrustado en Windows 10, versión 1511.
  • Iniciador de shell personalizado: Esta característica se denomina Shell Launcher en Windows 10, versión 1607 y posteriores.

Activar el iniciador de shell

Shell Launcher es un componente opcional y no está activado de forma predeterminada en Windows 10. Debe activarse antes de configurar. Puedes activar y configurar Shell Launcher en una imagen personalizada de Windows 10 (.wim) si Microsoft Windows no se ha instalado. Si Windows ya se ha instalado, debe activar shell Launcher antes de aplicar un paquete de aprovisionamiento para configurar shell Launcher.

Habilitación del iniciador de shell mediante Panel de control

  1. En el campo Buscar en la web y Windows , escriba Programas y características y presione Entrar o pulse o seleccione Programas y características para abrirlo.
  2. En la ventana Programas y características , seleccione Activar o desactivar características de Windows.
  3. En la ventana Características de Windows , expanda el nodo Bloqueo de dispositivos, active o desactive la casilla iniciador de Shell y, a continuación, seleccione Aceptar.
  4. La ventana Características de Windows indica que Windows está buscando archivos necesarios y muestra una barra de progreso. Una vez encontrada, la ventana indica que Windows está aplicando los cambios. Cuando se completa, la ventana indica que se completan los cambios solicitados.
  5. Seleccione Cerrar para cerrar la ventana Características de Windows .

Nota:

La activación del iniciador de Shell no requiere un reinicio del dispositivo.

Habilitación del iniciador de shell mediante una llamada a WESL_UserSetting

  1. Habilite o deshabilite shell Launcher llamando a la función WESL_UserSetting.SetEnabled en la clase Instrumental de administración de Windows (WMI) WESL_UserSetting.
  2. Si habilita o deshabilita shell Launcher mediante WESL_UserSetting, los cambios no afectan a ninguna sesión que haya iniciado sesión actualmente; debe cerrar la sesión y volver a iniciar sesión.

En este ejemplo se usa una imagen de Windows denominada install.wim, pero puede usar el mismo procedimiento para aplicar un paquete de aprovisionamiento (para obtener más información sobre DISM, consulte What Is Deployment Image Servicing and Management.

Habilitación del iniciador de shell mediante DISM

  1. Abra un símbolo del sistema con privilegios de administrador.

  2. Copie install.wim en una carpeta temporal en la unidad de disco duro (en los pasos siguientes, se supone que se denomina C:\wim).

  3. Cree un nuevo directorio.

    md c:\wim
    
  4. Monte la imagen.

    dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
    
  5. Habilite la característica.

    dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
    
  6. Confirme el cambio.

    dism /unmount-wim /MountDir:c:\wim /Commit
    

Habilitar el iniciador de shell mediante la configuración de Windows Designer

La configuración del iniciador de shell también está disponible como opciones de aprovisionamiento de Windows para que pueda configurar estas opciones que se aplicarán durante el tiempo de ejecución de la imagen. Puede establecer una o todas las opciones del iniciador de shell mediante la creación de un paquete de aprovisionamiento mediante la configuración de Windows Designer y, a continuación, aplicar el paquete de aprovisionamiento durante el tiempo de implementación de la imagen o el tiempo de ejecución. Si Windows no se ha instalado y usa la configuración de Windows Designer para crear medios de instalación con la configuración del iniciador de Shell incluido en la imagen o está aplicando un paquete de aprovisionamiento durante la instalación, debe habilitar Shell Launcher en los medios de instalación con DISM para que se aplique correctamente un paquete de aprovisionamiento.

Siga estos pasos para crear un paquete de aprovisionamiento que contenga la configuración de ShellLauncher.

  1. Compile un paquete de aprovisionamiento en la configuración de Windows Designer siguiendo las instrucciones de Creación de un paquete de aprovisionamiento para Windows 10.
  2. En la página Personalizaciones disponibles , seleccione Configuración de tiempo de ejecución>SMISettings>ShellLauncher.
  3. Establezca el valor de Habilitar en ENABLE. Aparecerán más opciones para configurar el iniciador de shell y puede establecer los valores según sea necesario.
  4. Una vez que haya terminado de configurar las opciones y crear el paquete de aprovisionamiento, puede aplicar el paquete al tiempo de implementación de la imagen o al tiempo de ejecución. Consulte Aplicar un paquete de aprovisionamiento para obtener más información. El proceso para aplicar el paquete a una imagen de Windows 10 Enterprise es el mismo.

Configurar el iniciador de shell

Hay dos maneras de configurar shell Launcher:

  1. En Windows 10, versión 1803, puedes configurar shell Launcher mediante el nodo ShellLauncher del proveedor de servicios de configuración de acceso asignado (CSP). Consulte AssignedAccess CSP (CSP de AssignedAccess ) para obtener más información. La configuración del iniciador de shell con este método también habilita automáticamente el iniciador de shell en el dispositivo, si el dispositivo lo admite.
  2. Use los proveedores WMI del iniciador de shell directamente en un script o aplicación de PowerShell.

Puede configurar las siguientes opciones para Shell Launcher:

  • Habilite o deshabilite el iniciador de Shell.
  • Especifique una configuración de shell para un usuario o grupo específico.
  • Quite una configuración de shell para un usuario o grupo específico.
  • Cambie la configuración predeterminada del shell.
  • Obtenga información sobre una configuración de shell para un usuario o grupo específico.

Los cambios no surten efecto hasta que un usuario inicie sesión.

Inicio de distintos shells para diferentes cuentas de usuario

De forma predeterminada, Shell Launcher ejecuta el shell predeterminado, que se especifica al crear la imagen del sistema operativo en tiempo de diseño. El shell predeterminado se establece en Cmd.exe, pero puede especificar cualquier archivo ejecutable para que sea el shell predeterminado.

Puede configurar El iniciador de shell para iniciar un shell diferente para usuarios o grupos específicos si no desea ejecutar el shell predeterminado. Por ejemplo, puede configurar un dispositivo para ejecutar un shell de aplicación personalizado para cuentas de invitado, pero ejecutar el shell estándar del Explorador de Windows para las cuentas de administrador con el fin de atender el dispositivo.

Si usa los proveedores WMI para configurar shell Launcher para un usuario o grupo en tiempo de ejecución, debe usar el identificador de seguridad (SID) para ese usuario o grupo; no puede usar el nombre de usuario ni el nombre de grupo.

Para obtener más información sobre los identificadores de seguridad comunes, consulte SID conocidos.

Cuando la cuenta de inicio de sesión actual pertenece a dos o más grupos que tienen configuraciones diferentes definidas para cada grupo, Shell Launcher usa la primera configuración que encuentra. El orden de búsqueda no está definido, por lo que se recomienda evitar asignar un usuario a varios grupos con distintas configuraciones del iniciador de Shell.

Realizar una acción cuando se cierra el shell

Cuando se cierra un shell personalizado, el iniciador de shell puede realizar una de las cuatro acciones:

Acción Descripción
0 Reinicie el shell.
1 Reinicie el dispositivo.
2 Apague el dispositivo.
3 No haga nada.

Importante

Asegúrese de que la aplicación de shell no se cierra automáticamente y no se cierra automáticamente con ninguna característica como filtro de diálogo, ya que esto puede conducir a un ciclo infinito de salida y reinicio, a menos que la acción de código de retorno esté establecida para no hacer nada.

Acción de código de retorno predeterminada

Puede definir una acción de código de retorno predeterminada para shell Launcher con la configuración DefaultReturnCodeAction. Si no cambia el valor inicial, la acción de código de retorno predeterminada se establece en 0 (cero), lo que indica que el iniciador de shell reinicia el shell cuando se cierra el shell.

Asignar el código de salida a una acción del iniciador de Shell

Shell Launcher puede realizar una acción específica en función del código de salida devuelto por el shell. Para cualquier código de salida determinado devuelto por el shell, puede configurar la acción que realiza shell Launcher asignando ese código de salida a una de las acciones de salida del shell.

Si el código de salida no coincide con un valor definido, Shell Launcher realiza la acción de código de retorno predeterminada.

Por ejemplo, el shell podría devolver valores de código de salida de -1, 0, 1 o 255 en función de cómo salga el shell. Puede configurar el iniciador de shell para:

  • reinicie el dispositivo (1) cuando el shell devuelva un código de salida de valor -1
  • reinicie el shell (0) cuando el shell devuelva un código de salida del valor 0
  • no hacer nada (3) cuando el shell devuelve un código de salida del valor 1
  • apagar el dispositivo (2) cuando el shell devuelve un código de salida del valor 255

La asignación de acciones de código de retorno personalizada tendría este aspecto:

Código de salida Acción
-1 1 (reinicie el dispositivo)
0 0 (reinicie el shell)
1 3 (no hacer nada)
255 2 (apagar el dispositivo)

Establecimiento del shell personalizado

Modifique el siguiente script de PowerShell según corresponda y ejecute el script en el dispositivo.

# Check if shell launcher license is enabled
function Check-ShellLauncherLicenseEnabled
{
    [string]$source = @"
using System;
using System.Runtime.InteropServices;

static class CheckShellLauncherLicense
{
    const int S_OK = 0;

    public static bool IsShellLauncherLicenseEnabled()
    {
        int enabled = 0;

        if (NativeMethods.SLGetWindowsInformationDWORD("EmbeddedFeature-ShellLauncher-Enabled", out enabled) != S_OK) {
            enabled = 0;
        }
        return (enabled != 0);
    }

    static class NativeMethods
    {
        [DllImport("Slc.dll")]
        internal static extern int SLGetWindowsInformationDWORD([MarshalAs(UnmanagedType.LPWStr)]string valueName, out int value);
    }

}
"@

    $type = Add-Type -TypeDefinition $source -PassThru

    return $type[0]::IsShellLauncherLicenseEnabled()
}

[bool]$result = $false

$result = Check-ShellLauncherLicenseEnabled
"`nShell Launcher license enabled is set to " + $result
if (-not($result))
{
    "`nThis device doesn't have required license to use Shell Launcher"
    exit
}

$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"

# Create a handle to the class instance so we can call the static methods.
try {
    $ShellLauncherClass = [wmiclass]"\\$COMPUTER\${NAMESPACE}:WESL_UserSetting"
    } catch [Exception] {
    write-host $_.Exception.Message; 
    write-host "Make sure Shell Launcher feature is enabled"
    exit
    }


# This well-known security identifier (SID) corresponds to the BUILTIN\Administrators group.

$Admins_SID = "S-1-5-32-544"

# Create a function to retrieve the SID for a user account on a machine.

function Get-UsernameSID($AccountName) {

    $NTUserObject = New-Object System.Security.Principal.NTAccount($AccountName)
    $NTUserSID = $NTUserObject.Translate([System.Security.Principal.SecurityIdentifier])

    return $NTUserSID.Value
}

# Get the SID for a user account named "Cashier". Rename "Cashier" to an existing account on your system to test this script.

$Cashier_SID = Get-UsernameSID("Cashier")

# Define actions to take when the shell program exits.

$restart_shell = 0
$restart_device = 1
$shutdown_device = 2
$do_nothing = 3

# Examples. You can change these examples to use the program that you want to use as the shell.

# This example sets the command prompt as the default shell, and restarts the device if the command prompt is closed. 

$ShellLauncherClass.SetDefaultShell("cmd.exe", $restart_device)

# Display the default shell to verify that it was added correctly.

$DefaultShellObject = $ShellLauncherClass.GetDefaultShell()

"`nDefault Shell is set to " + $DefaultShellObject.Shell + " and the default action is set to " + $DefaultShellObject.defaultaction

# Set Internet Explorer as the shell for "Cashier", and restart the machine if Internet Explorer is closed.

$ShellLauncherClass.SetCustomShell($Cashier_SID, "c:\program files\internet explorer\iexplore.exe www.microsoft.com", ($null), ($null), $restart_shell)

# Set Explorer as the shell for administrators.

$ShellLauncherClass.SetCustomShell($Admins_SID, "explorer.exe")

# View all the custom shells defined.

"`nCurrent settings for custom shells:"
Get-WmiObject -namespace $NAMESPACE -computer $COMPUTER -class WESL_UserSetting | Select Sid, Shell, DefaultAction

# Enable Shell Launcher

$ShellLauncherClass.SetEnabled($TRUE)

$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled()

"`nEnabled is set to " + $IsShellLauncherEnabled.Enabled

# Remove the new custom shells.

$ShellLauncherClass.RemoveCustomShell($Admins_SID)

$ShellLauncherClass.RemoveCustomShell($Cashier_SID)

# Disable Shell Launcher

$ShellLauncherClass.SetEnabled($FALSE)

$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled()

"`nEnabled is set to " + $IsShellLauncherEnabled.Enabled

Nota:

El script anterior incluye ejemplos de varias opciones de configuración, incluida la eliminación de un shell personalizado y la deshabilitación del iniciador de shell. No está pensado para ejecutarse tal cual.

Derechos de usuario del iniciador de Shell

Se inicia un shell personalizado con el mismo nivel de derechos de usuario que la cuenta que ha iniciado sesión. Esto significa que un usuario con derechos de administrador puede realizar cualquier acción del sistema que requiera derechos de administrador, incluido el inicio de otras aplicaciones con derechos de administrador, mientras que un usuario sin derechos de administrador no puede.

Advertencia

Si la aplicación de shell requiere derechos de administrador y debe elevarse y el control de cuentas de usuario (UAC) está presente en el dispositivo, debe deshabilitar UAC para que el iniciador de Shell inicie la aplicación de shell.