Selector de shell
Con El iniciador de shell, puede configurar un dispositivo de pantalla completa para usar 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 diferentes usuarios o grupos de usuarios.
Hay algunas excepciones a las aplicaciones y ejecutables que puede usar como shell personalizado:
- No se puede usar el siguiente ejecutable como un shell personalizado:
C:\\Windows\\System32\\Eshell.exe
. El uso de Eshell.exe como shell predeterminado dará como resultado una pantalla en blanco después de que el usuario inicie sesión. - No se puede usar una aplicación universal de Windows como un shell personalizado.
- No puede usar un shell personalizado para iniciar aplicaciones universales de Windows, por ejemplo, la aplicación Configuración.
- No se puede usar una aplicación que inicie un proceso diferente y salga como un shell personalizado. Por ejemplo, no puede especificar write.exe en el iniciador de shell. El Selector de shell inicia un shell personalizado y supervisa el proceso para identificar cuándo se cierra el shell personalizado. Write.exe crea un proceso de wordpad.exe de 32 bits y se cierra. Dado que el iniciador de shell no conoce el proceso de wordpad.exe recién creado, el iniciador de shell realiza una acción basada en el código de salida de Write.exey reinicia el shell personalizado.
- No puede impedir que el sistema se apague. Para Shell Launcher V1 y V2, no puede bloquear la sesión que termina devolviendo FALSE al recibir el mensaje WM_QUERYENDSESSION en una aplicación gráfica o devolver 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 se puede configurar el iniciador de shell y el acceso asignado en el mismo sistema.
Use Shell Launcher V2, puede especificar una aplicación universal de Windows como un shell personalizado. Active Usar el iniciador de shell para crear un quiosco de Windows 10 para ver las diferencias entre Shell Launcher v1 y Shell Launcher V2.
El iniciador de shell 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.
El iniciador de shell 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 de control del 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 puede 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 de 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.
El iniciador de shell 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 permitirte usar una aplicación para UWP para tu shell de reemplazo, Shell Launcher v2 ofrece más mejoras:
- Puedes usar una aplicación de escritorio de Windows personalizada que luego pueda iniciar aplicaciones para UWP, como Configuración y Teclado táctil.
- Desde un shell de UWP personalizado, puedes iniciar vistas secundarias y ejecutarlas 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, 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 los subconjuntos.
- 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 Iniciador de shell en Windows 10, versión 1607 y posteriores.
Activar el iniciador de shell
El iniciador de shell es un componente opcional y no está activado de forma predeterminada en Windows 10. Debe estar activado antes de configurarlo. Puede activar y configurar shell Launcher en una imagen de Windows 10 personalizada (.wim) si Microsoft Windows no se ha instalado. Si Windows ya se ha instalado, debe activar el iniciador de shell antes de aplicar un paquete de aprovisionamiento para configurar el iniciador de shell.
Habilitación del iniciador de shell mediante Panel de control
- 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.
- En la ventana Programas y características , seleccione Activar o desactivar las características de Windows.
- 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.
- La ventana Características de Windows indica que Windows está buscando los archivos necesarios y muestra una barra de progreso. Una vez que se encuentra, la ventana indica que Windows está aplicando los cambios. Cuando se completa, la ventana indica que se han completado los cambios solicitados.
- Seleccione Cerrar para cerrar la ventana Características de Windows .
Nota
La activación del iniciador de shell no requiere un reinicio del dispositivo.
Habilitar el iniciador de shell llamando a WESL_UserSetting
- Habilite o deshabilite el iniciador de shell llamando a la función WESL_UserSetting.SetEnabled en la clase Instrumental de administración de Windows (WMI) WESL_UserSetting.
- Si habilita o deshabilita El iniciador de shell mediante WESL_UserSetting, los cambios no afectan a las sesiones que han 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, vea What Is Deployment Image Servicing and Management.
Habilitación del iniciador de shell mediante DISM
Abra un símbolo del sistema con privilegios de administrador.
Copie install.wim en una carpeta temporal en el disco duro (en los pasos siguientes, se supone que se llama C:\wim).
Cree un nuevo directorio.
md c:\wim
Monta la imagen.
dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
Habilite la característica.
dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
Confirme el cambio.
dism /unmount-wim /MountDir:c:\wim /Commit
Habilitación del iniciador de shell mediante la configuración de Windows Designer
La configuración del iniciador de shell también está disponible como configuración de aprovisionamiento de Windows, por lo que puede configurar estas opciones para que se apliquen durante el tiempo de ejecución de la imagen. Puede establecer una o todas las opciones del iniciador de Shell creando un paquete de aprovisionamiento mediante la configuración de Windows Designer y, a continuación, aplicando 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 de Shell Launcher incluida en la imagen o está aplicando un paquete de aprovisionamiento durante la instalación, debe habilitar Shell Launcher en el medio de instalación con DISM para que un paquete de aprovisionamiento se aplique correctamente.
Siga estos pasos para crear un paquete de aprovisionamiento que contenga la configuración de ShellLauncher.
- Cree 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.
- En la página Personalizaciones disponibles, seleccione Configuración en> tiempo de ejecuciónSMISettings>ShellLauncher.
- Establezca el valor de Habilitar en HABILITAR. Aparece más opciones para configurar el iniciador de shell y puede establecer los valores como desee.
- Una vez que haya terminado de configurar los valores 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:
- En Windows 10, versión 1803, puede configurar el iniciador de shell mediante el nodo ShellLauncher del proveedor de servicios de configuración de acceso asignado (CSP). Consulte AssignedAccess CSP para obtener más información. La configuración del iniciador de shell mediante este método también habilita automáticamente el iniciador de shell en el dispositivo, si el dispositivo lo admite.
- Use los proveedores WMI del iniciador de shell directamente en una aplicación o script de PowerShell.
Puede configurar las siguientes opciones para El iniciador de shell:
- 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 diferentes shells para diferentes cuentas de usuario
De forma predeterminada, el iniciador de shell 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 las cuentas de invitado, pero ejecutar el shell estándar del Explorador de Windows para las cuentas de administrador con el fin de dar servicio al 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 del grupo.
Para obtener más información sobre los identificadores de seguridad comunes, consulte SID conocidos.
Cuando la cuenta actual con sesión iniciada pertenece a dos o más grupos que tienen configuraciones diferentes definidas para cada grupo, el iniciador de shell usa la primera configuración que encuentra. El orden de búsqueda no está definido, por lo que se recomienda evitar la asignación de un usuario a varios grupos con distintas configuraciones del iniciador de shell.
Realizar una acción cuando el shell salga
Cuando se cierra un shell personalizado, el iniciador de shell puede realizar una de las cuatro acciones siguientes:
Acción | Descripción |
---|---|
0 | Reinicie el shell. |
1 | Reinicia el dispositivo. |
2 | Apague el dispositivo. |
3 | No hacer 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 cuadro de diálogo, ya que esto puede dar lugar a un ciclo infinito de salida y reinicio, a menos que la acción de código devuelto esté establecida en no hacer nada.
Acción de código devuelto predeterminada
Puede definir una acción de código devuelto predeterminada para shell Launcher con el valor DefaultReturnCodeAction. Si no cambia el valor inicial, la acción de código devuelto 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
El iniciador de shell 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 el iniciador de shell mediante la asignación de 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, el iniciador de shell realiza la acción de código devuelto 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:
- reiniciar el dispositivo (1) cuando el shell devuelve 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 acción de código devuelto personalizada tendría este aspecto:
Código de salida | Acción |
---|---|
-1 | 1 (reiniciar el dispositivo) |
0 | 0 (reinicie el shell) |
1 | 3 (no hacer nada) |
255 | 2 (apagar el dispositivo) |
Establecer el 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 y como está.
Derechos de usuario del iniciador de shell
Un shell personalizado se lanza con el mismo nivel de derechos de usuario que la cuenta con la que se inició 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 tener privilegios elevados, y el Control de cuentas de usuario (UAC) está presente en el dispositivo, debe deshabilitar UAC para que shell Launcher inicie la aplicación de shell.