Iniciador de Shell
Com o Shell Launcher, pode configurar um dispositivo de quiosque para utilizar praticamente qualquer aplicação ou executável como shell personalizado. O aplicativo que você especificar substitui o shell padrão (explorer.exe) que geralmente é executado quando um usuário faz login.
Também pode configurar o Shell Launcher para iniciar diferentes aplicações shell para diferentes utilizadores ou grupos de utilizadores.
Existem algumas exceções às aplicações e executáveis que pode utilizar como uma shell personalizada:
- Não pode utilizar o seguinte executável como uma shell personalizada:
C:\\Windows\\System32\\Eshell.exe
. Utilizar Eshell.exe como shell predefinida resultará num ecrã em branco após o utilizador iniciar sessão. - Não pode utilizar uma aplicação Universal do Windows como uma shell personalizada.
- Não pode utilizar uma shell personalizada para iniciar aplicações Universais do Windows, por exemplo, a aplicação Definições.
- Não pode utilizar uma aplicação que inicia um processo diferente e sai como uma shell personalizada. Por exemplo, não pode especificar write.exe no Iniciador de Shell. O Iniciador de Shell inicia um shell personalizado e monitora o processo para identificar quando o shell personalizado é encerrado. Write.exe cria um processo de 32 bits do wordpad.exe e é encerrado. Uma vez que o Shell Launcher não tem conhecimento do processo de wordpad.exe recentemente criado, o Shell Launcher toma medidas com base no código de saída do Write.exee reinicia a shell personalizada.
- Não pode impedir que o sistema encerre. Para o Iniciador de Shell V1 e V2, não pode bloquear o fim da sessão ao devolver FALSO ao receber a mensagem de WM_QUERYENDSESSION numa aplicação gráfica ou devolver FALSE na rotina do processador que é adicionada através da função SetConsoleCtrlHandler numa aplicação de consola.
Observação
Não pode configurar o Shell Launcher e o acesso atribuído no mesmo sistema.
Utilize o Shell Launcher V2, pode especificar uma aplicação Universal do Windows como uma shell personalizada. Selecione Utilizar o Shell Launcher para criar um quiosque de Windows 10 para as diferenças entre o Shell Launcher v1 e o Shell Launcher V2.
O Shell Launcher processa as chaves de registo Run e RunOnce antes de iniciar a shell personalizada, pelo que a shell personalizada não precisa de processar o arranque automático de outras aplicações e serviços.
O Shell Launcher também processa o comportamento do sistema quando a shell personalizada sai. Pode configurar o comportamento de saída da shell se o comportamento predefinido não corresponder às suas necessidades.
Os métodos de controlo do acesso a outras aplicações de ambiente de trabalho e componentes do sistema podem ser utilizados para além de utilizar o Iniciador de Shell, como, por exemplo, Política de Grupo, AppLocker e Mobile Gerenciamento de Dispositivos
Observação
No Shell Launcher v1, disponível no Windows 10, só pode especificar uma aplicação de ambiente de trabalho do Windows como shell de substituição. No Shell Launcher v2, disponível no Windows 10, versão 1809 e superior, também pode especificar uma aplicação UWP como shell de substituição.
Para utilizar o Shell Launcher v2 na versão 1809, tem de instalar a atualização KB4551853.
Diferenças entre o Shell Launcher v1 e o Shell Launcher v2
O Shell Launcher v1 substitui explorer.exe
, a shell predefinida, por eshell.exe
, que pode iniciar uma aplicação de ambiente de trabalho do Windows.
O Shell Launcher v2 substitui por explorer.exe
customshellhost.exe
. Este novo ficheiro executável pode iniciar uma aplicação de ambiente de trabalho do Windows ou uma aplicação UWP.
Além de permitir a utilização de uma aplicação UWP para a shell de substituição, o Shell Launcher v2 oferece mais melhorias:
- Pode utilizar uma aplicação de ambiente de trabalho do Windows personalizada que, em seguida, pode iniciar aplicações UWP, como Definições e Teclado Tátil.
- A partir de uma shell UWP personalizada, pode iniciar vistas secundárias e executar em vários monitores.
- A aplicação shell personalizada é executada em ecrã inteiro e pode executar outras aplicações em ecrã inteiro a pedido do utilizador. Para configurações XML de exemplo para as diferentes combinações de aplicações, veja Samples for Shell Launcher v2 (Exemplos para o Shell Launcher v2).
Requisitos
Windows 10 Enterprise ou Windows 10 Education.
Terminologia
- Ative, ative: Para disponibilizar a definição ao dispositivo e, opcionalmente, aplicar as definições ao dispositivo.
- Configurar: Para personalizar a definição ou as subsefinições.
- Iniciador de Shell Incorporado: Esta funcionalidade chama-se Embedded Shell Launcher no Windows 10, versão 1511.
- Iniciador de Shell Personalizado: Esta funcionalidade chama-se Shell Launcher no Windows 10, versão 1607 e posterior.
Ativar o Shell Launcher
O Shell Launcher é um componente opcional e não está ativado por predefinição no Windows 10. Tem de estar ativado antes da configuração. Pode ativar e configurar o Shell Launcher numa imagem de Windows 10 personalizada (.wim) se o Microsoft Windows não tiver sido instalado. Se o Windows já tiver sido instalado, tem de ativar o Shell Launcher antes de aplicar um pacote de aprovisionamento para configurar o Shell Launcher.
Ativar o Shell Launcher com Painel de Controle
- No campo Pesquisar na Web e no Windows , escreva Programas e Funcionalidades e prima Enter ou toque ou selecione Programas e Funcionalidades para abri-lo.
- Na janela Programas e Funcionalidades , selecione Ativar ou desativar as funcionalidades do Windows.
- Na janela Funcionalidades do Windows , expanda o nó Bloqueio do Dispositivo , selecione ou desmarque a caixa de verificação do Iniciador de Shell e, em seguida, selecione OK.
- A janela Funcionalidades do Windows indica que o Windows está à procura de ficheiros necessários e apresenta uma barra de progresso. Depois de encontrada, a janela indica que o Windows está a aplicar as alterações. Quando terminar, a janela indica que as alterações pedidas foram concluídas.
- Selecione Fechar para fechar a janela Funcionalidades do Windows .
Observação
Ativar o Shell Launcher não requer um reinício do dispositivo.
Ativar o Shell Launcher ao chamar WESL_UserSetting
- Ative ou desative o Iniciador de Shell ao chamar a função WESL_UserSetting.SetEnabled na classe Windows Management Instrumentation (WMI) WESL_UserSetting.
- Se ativar ou desativar o Iniciador de Shell com WESL_UserSetting, as alterações não afetam as sessões que estão atualmente iniciadas; tem de terminar sessão e voltar a iniciar sessão.
Este exemplo utiliza uma imagem do Windows denominada install.wim, mas pode utilizar o mesmo procedimento para aplicar um pacote de aprovisionamento (para obter mais informações sobre o DISM, consulte O que é a Gestão e Manutenção da Imagem de Implementação.
Ativar o Shell Launcher com o DISM
Abra uma linha de comandos com privilégios de administrador.
Copie install.wim para uma pasta temporária no disco rígido (nos passos seguintes, partimos do princípio de que se chama C:\wim).
Crie um novo diretório.
md c:\wim
Monte a imagem.
dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
Ative a funcionalidade.
dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
Consolide a alteração.
dism /unmount-wim /MountDir:c:\wim /Commit
Ativar o Shell Launcher com o Windows Configuration Designer
As definições do Shell Launcher também estão disponíveis como definições de aprovisionamento do Windows para que possa configurar estas definições para serem aplicadas durante o runtime da imagem. Pode definir uma ou todas as definições do Shell Launcher ao criar um pacote de aprovisionamento com a Configuração do Windows Designer e, em seguida, aplicar o pacote de aprovisionamento durante o tempo de implementação da imagem ou o runtime. Se o Windows não tiver sido instalado e estiver a utilizar o Windows Configuration Designer para criar um suporte de dados de instalação com definições do Shell Launcher incluídas na imagem ou estiver a aplicar um pacote de aprovisionamento durante a configuração, tem de ativar o Iniciador de Shell no suporte de dados de instalação com DISM para que um pacote de aprovisionamento seja aplicado com êxito.
Utilize os seguintes passos para criar um pacote de aprovisionamento que contenha as definições do ShellLauncher.
- Crie um pacote de aprovisionamento no Windows Configuration Designer ao seguir as instruções em Criar um pacote de aprovisionamento para Windows 10.
- Na página Personalizações disponíveis, selecione Definições> de runtimeSMIDefinições>ShellLauncher.
- Defina o valor de Ativar como ATIVAR. São apresentadas mais opções para configurar o Iniciador de Shell e pode definir os valores conforme pretendido.
- Depois de concluir a configuração das definições e a criação do pacote de aprovisionamento, pode aplicar o pacote ao tempo de implementação ou runtime da imagem. Veja Aplicar um pacote de aprovisionamento para obter mais informações. O processo para aplicar o pacote a uma imagem de Windows 10 Enterprise é o mesmo.
Configurar o Iniciador de Shell
Existem duas formas de configurar o Iniciador de Shell:
- No Windows 10, versão 1803, pode configurar o Shell Launcher com o nó ShellLauncher do Fornecedor de Serviços de Configuração de Acesso Atribuído (CSP). Veja AssignedAccess CSP (CSP AssignedAccess) para obter detalhes. Configurar o Shell Launcher com este método também ativa automaticamente o Iniciador da Shell no dispositivo, se o dispositivo o suportar.
- Utilize os fornecedores WMI do Shell Launcher diretamente num script ou aplicação do PowerShell.
Pode configurar as seguintes opções para o Shell Launcher:
- Ativar ou desativar o Iniciador de Shell.
- Especifique uma configuração de shell para um utilizador ou grupo específico.
- Remova uma configuração de shell para um utilizador ou grupo específico.
- Altere a configuração da shell predefinida.
- Obtenha informações sobre uma configuração de shell para um utilizador ou grupo específico.
As alterações não são aplicadas até que um utilizador inicie sessão.
Iniciar shells diferentes para contas de utilizador diferentes
Por predefinição, o Shell Launcher executa a shell predefinida, que é especificada quando cria a imagem do SO no momento da conceção. A shell predefinida está definida como Cmd.exe, mas pode especificar qualquer ficheiro executável para ser a shell predefinida.
Pode configurar o Shell Launcher para iniciar uma shell diferente para utilizadores ou grupos específicos se não quiser executar a shell predefinida. Por exemplo, pode configurar um dispositivo para executar uma shell de aplicação personalizada para contas de convidado, mas executar a shell padrão do Windows Explorer para contas de administrador para poder atender o dispositivo.
Se utilizar os fornecedores WMI para configurar o Shell Launcher para um utilizador ou grupo no tempo de execução, tem de utilizar o identificador de segurança (SID) para esse utilizador ou grupo; não pode utilizar o nome de utilizador ou o nome do grupo.
Para obter mais informações sobre identificadores de segurança comuns, veja SIDs conhecidos.
Quando a conta com sessão iniciada atual pertence a dois ou mais grupos que têm configurações diferentes definidas para cada grupo, o Shell Launcher utiliza a primeira configuração que encontrar. A ordem de pesquisa não está definida, pelo que recomendamos que evite atribuir um utilizador a vários grupos com diferentes configurações do Shell Launcher.
Executar uma ação quando a shell sair
Quando uma shell personalizada sai, o Shell Launcher pode executar uma de quatro ações:
Ação | Descrição |
---|---|
0 | Reinicie a shell. |
1 | Reinicie o dispositivo. |
2 | Encerre o dispositivo. |
3 | Não fazer nada. |
Importante
Certifique-se de que a aplicação shell não sai automaticamente e não é fechada automaticamente por quaisquer funcionalidades como o Filtro de Caixa de Diálogo, uma vez que isto pode levar a um ciclo infinito de saída e reinício, a menos que a ação de código de retorno esteja definida para não fazer nada.
Ação de código de retorno predefinido
Pode definir uma ação de código de retorno predefinida para o Iniciador de Shell com a definição DefaultReturnCodeAction. Se não alterar o valor inicial, a ação de código de retorno predefinida é definida como 0 (zero), o que indica que o Shell Launcher reinicia a shell quando a shell é encerrada.
Mapear o código de saída para uma ação do Iniciador de Shell
O Shell Launcher pode efetuar uma ação específica com base no código de saída devolvido pela shell. Para qualquer código de saída devolvido pela shell, pode configurar a ação que o Shell Launcher executa ao mapear esse código de saída para uma das ações de saída da shell.
Se o código de saída não corresponder a um valor definido, o Shell Launcher efetua a ação de código de retorno predefinida.
Por exemplo, a shell pode devolver valores de código de saída de -1, 0, 1 ou 255, dependendo da forma como a shell sai. Pode configurar o Shell Launcher para:
- reiniciar o dispositivo (1) quando a shell devolver um código de saída do valor -1
- reiniciar a shell (0) quando a shell devolver um código de saída do valor 0
- não fazer nada (3) quando a shell devolve um código de saída do valor 1
- encerrar o dispositivo (2) quando a shell devolver um código de saída do valor 255
O mapeamento de ação do código de retorno personalizado teria o seguinte aspeto:
Código de saída | Ação |
---|---|
-1 | 1 (reinicie o dispositivo) |
0 | 0 (reinicie a shell) |
1 | 3 (não fazer nada) |
255 | 2 (encerre o dispositivo) |
Definir a shell personalizada
Modifique o seguinte script do PowerShell conforme adequado e execute o script no 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
Observação
O script anterior inclui exemplos de várias opções de configuração, incluindo remover uma shell personalizada e desativar o Shell Launcher. Não se destina a ser executado tal como está.
Direitos de utilizador do Shell Launcher
Um shell personalizado é iniciado com o mesmo nível de direitos de usuário da conta conectada. Isto significa que um utilizador com direitos de administrador pode efetuar qualquer ação de sistema que exija direitos de administrador, incluindo iniciar outras aplicações com direitos de administrador, enquanto um utilizador sem direitos de administrador não pode.
Aviso
Se a aplicação shell necessitar de direitos de administrador e precisar de ser elevada e o Controlo de Conta de Utilizador (UAC) estiver presente no seu dispositivo, tem de desativar o UAC para que o Iniciador da Shell inicie a aplicação shell.