Avvio shell
Usando Shell Launcher, è possibile configurare un dispositivo tutto schermo per usare quasi tutte le applicazioni o eseguibili come shell personalizzata. L'applicazione che specifichi sostituisce la shell predefinita (explorer.exe) che in genere viene eseguita quando un utente esegue l'accesso.
È anche possibile configurare Shell Launcher per avviare applicazioni shell diverse per utenti o gruppi di utenti diversi.
Esistono alcune eccezioni per le applicazioni e i file eseguibili che è possibile usare come shell personalizzata:
- Non è possibile usare il file eseguibile seguente come shell personalizzata:
C:\\Windows\\System32\\Eshell.exe
. Se si usa Eshell.exe come shell predefinita, verrà visualizzata una schermata vuota dopo l'accesso dell'utente. - Non puoi usare un'app di Windows universale come shell personalizzata.
- Non è possibile usare una shell personalizzata per avviare app di Windows universali, ad esempio l'app Impostazioni.
- Non è possibile usare un'applicazione che avvia un processo diverso e si chiude come shell personalizzata. Ad esempio, non è possibile specificare write.exe in Shell Launcher. Avvio shell avvia una shell personalizzata e monitora il processo per identificare quando la shell personalizzata viene chiusa. Write.exe crea un processo wordpad.exe a 32 bit e viene chiuso. Poiché Shell Launcher non è a conoscenza del processo di wordpad.exe appena creato, Shell Launcher esegue un'azione in base al codice di uscita di Write.exee riavvia la shell personalizzata.
- Non è possibile impedire l'arresto del sistema. Per Shell Launcher V1 e V2, non è possibile bloccare la chiusura della sessione restituendo FALSE alla ricezione del messaggio WM_QUERYENDSESSION in un'applicazione grafica o restituendo FALSE nella routine del gestore aggiunta tramite la funzione SetConsoleCtrlHandler in un'applicazione console.
Nota
Non è possibile configurare l'utilità di avvio della shell e l'accesso assegnato nello stesso sistema.
Usa Shell Launcher V2, puoi specificare un'app di Windows universale come shell personalizzata. Selezionare Usa utilità di avvio shell per creare un chiosco multimediale Windows 10 per individuare le differenze tra Shell Launcher v1 e Shell Launcher V2.
Shell Launcher elabora le chiavi del Registro di sistema Run e RunOnce prima di avviare la shell personalizzata, quindi la shell personalizzata non deve gestire l'avvio automatico di altre applicazioni e servizi.
Shell Launcher gestisce anche il comportamento del sistema quando la shell personalizzata esce. È possibile configurare il comportamento di uscita della shell se il comportamento predefinito non soddisfa le proprie esigenze.
I metodi per controllare l'accesso ad altre applicazioni desktop e componenti di sistema possono essere usati oltre all'uso dell'utilità di avvio della shell, ad esempio, Criteri di gruppo, AppLocker e Mobile Gestione dispositivi
Nota
In Shell Launcher v1, disponibile in Windows 10, è possibile specificare solo un'applicazione desktop Windows come shell sostitutiva. In Shell Launcher v2, disponibile in Windows 10, versione 1809 e versioni successive, è anche possibile specificare un'app UWP come shell sostitutiva.
Per usare Shell Launcher v2 nella versione 1809, è necessario installare l'aggiornamento KB4551853.
Differenze tra Shell Launcher v1 e Shell Launcher v2
Shell Launcher v1 sostituisce explorer.exe
, la shell predefinita, con eshell.exe
, che può avviare un'applicazione desktop di Windows.
Shell Launcher v2 sostituisce explorer.exe
con customshellhost.exe
. Questo nuovo file eseguibile può avviare un'applicazione desktop Windows o un'app UWP.
Oltre a consentire l'uso di un'app UWP per la shell sostitutiva, Shell Launcher v2 offre altri miglioramenti:
- È possibile usare un'applicazione desktop windows personalizzata che può quindi avviare app UWP, ad esempio Impostazioni e Tastiera virtuale.
- Da una shell UWP personalizzata è possibile avviare visualizzazioni secondarie ed eseguire su più monitoraggi.
- L'app shell personalizzata viene eseguita a schermo intero e può eseguire altre app a schermo intero su richiesta dell'utente. Per configurazioni XML di esempio per le diverse combinazioni di app, vedere Esempi per Shell Launcher v2.
Requisiti
Windows 10 Enterprise o Windows 10 Education.
Terminologia
- Attivare e abilitare: Per rendere l'impostazione disponibile per il dispositivo e, facoltativamente, applicare le impostazioni al dispositivo.
- Configurare: Per personalizzare l'impostazione o le sottoimpostazioni.
- Utilità di avvio shell incorporata: Questa funzionalità è denominata Utilità di avvio della shell incorporata in Windows 10 versione 1511.
- Utilità di avvio della shell personalizzata: Questa funzionalità è denominata Shell Launcher in Windows 10 versione 1607 e successive.
Attivare Shell Launcher
Shell Launcher è un componente facoltativo e non è attivato per impostazione predefinita in Windows 10. Deve essere attivato prima della configurazione. È possibile attivare e configurare Shell Launcher in un'immagine Windows 10 personalizzata (con estensione wim) se Microsoft Windows non è stato installato. Se Windows è già stato installato, è necessario attivare Shell Launcher prima di applicare un pacchetto di provisioning per configurare Shell Launcher.
Abilitare l'utilità di avvio della shell usando Pannello di controllo
- Nel campo Cerca nel Web e in Windows digitare Programmi e funzionalità e premere INVIO o toccare o selezionare Programmi e funzionalità per aprirlo.
- Nella finestra Programmi e funzionalità selezionare Attiva o disattiva le funzionalità di Windows.
- Nella finestra Funzionalità di Windows espandere il nodo Blocco dispositivo , selezionare o deselezionare la casella di controllo per Avvio shell e quindi selezionare OK.
- La finestra Funzionalità di Windows indica che Windows sta cercando i file necessari e visualizza un indicatore di stato. Una volta trovate, la finestra indica che Windows sta applicando le modifiche. Al termine, la finestra indica che le modifiche richieste sono state completate.
- Selezionare Chiudi per chiudere la finestra Funzionalità di Windows .
Nota
L'attivazione di Shell Launcher non richiede il riavvio del dispositivo.
Abilitare Shell Launcher chiamando WESL_UserSetting
- Abilitare o disabilitare l'utilità di avvio della shell chiamando la funzione WESL_UserSetting.SetEnabled nella classe Strumentazione gestione Windows (WMI) WESL_UserSetting.
- Se si abilita o disabilita l'utilità di avvio della shell usando WESL_UserSetting, le modifiche non influiscono sulle sessioni che attualmente hanno eseguito l'accesso; è necessario disconnettersi ed eseguire di nuovo l'accesso.
Questo esempio usa un'immagine Windows denominata install.wim, ma è possibile usare la stessa procedura per applicare un pacchetto di provisioning. Per altre informazioni su Gestione e manutenzione immagini distribuzione, vedere What Is Deployment Image Servicing and Management.
Abilitare l'utilità di avvio della shell con Gestione e manutenzione immagini distribuzione
Aprire un prompt dei comandi con privilegi di amministratore.
Copiare install.wim in una cartella temporanea nel disco rigido . Nei passaggi seguenti si presuppone che si chiami C:\wim.
Creare una nuova directory.
md c:\wim
Monta l'immagine Windows.
dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
Abilitare la funzionalità.
dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
Eseguire il commit della modifica.
dism /unmount-wim /MountDir:c:\wim /Commit
Abilitare l'utilità di avvio della shell con Configurazione di Windows Designer
Le impostazioni dell'utilità di avvio della shell sono disponibili anche come impostazioni di provisioning di Windows, in modo da poter configurare queste impostazioni da applicare durante il runtime dell'immagine. È possibile impostare una o tutte le impostazioni dell'utilità di avvio della shell creando un pacchetto di provisioning usando configurazione di Windows Designer e quindi applicando il pacchetto di provisioning durante il runtime o il tempo di distribuzione dell'immagine. Se Windows non è stato installato e si usa configurazione di Windows Designer per creare supporti di installazione con le impostazioni per Shell Launcher incluse nell'immagine o si applica un pacchetto di provisioning durante l'installazione, è necessario abilitare Shell Launcher nel supporto di installazione con Gestione e manutenzione immagini distribuzione per applicare correttamente un pacchetto di provisioning.
Seguire questa procedura per creare un pacchetto di provisioning che contiene le impostazioni di ShellLauncher.
- Compilare un pacchetto di provisioning in Configurazione di Windows Designer seguendo le istruzioni riportate in Creare un pacchetto di provisioning per Windows 10.
- Nella pagina Personalizzazioni disponibili selezionare Impostazioni> di runtimeSMISettings>ShellLauncher.
- Impostare il valore di Enable su ENABLE. Vengono visualizzate altre opzioni per configurare l'utilità di avvio della shell ed è possibile impostare i valori come desiderato.
- Dopo aver configurato le impostazioni e creato il pacchetto di provisioning, è possibile applicare il pacchetto al runtime o al tempo di distribuzione dell'immagine. Per altre informazioni, vedere Applicare un pacchetto di provisioning . Il processo per l'applicazione del pacchetto a un'immagine Windows 10 Enterprise è lo stesso.
Configurare Avvio shell
È possibile configurare Shell Launcher in due modi:
- In Windows 10 versione 1803 è possibile configurare Shell Launcher usando il nodo ShellLauncher del provider di servizi di configurazione dell'accesso assegnato. Per informazioni dettagliate , vedere AssignedAccess CSP . La configurazione di Shell Launcher usando questo metodo abilita automaticamente anche l'utilità di avvio della shell nel dispositivo, se supportata dal dispositivo.
- Usare i provider WMI dell'utilità di avvio shell direttamente in uno script o in un'applicazione PowerShell.
È possibile configurare le opzioni seguenti per Avvio shell:
- Abilitare o disabilitare l'utilità di avvio della shell.
- Specificare una configurazione della shell per un utente o un gruppo specifico.
- Rimuovere una configurazione della shell per un utente o un gruppo specifico.
- Modificare la configurazione della shell predefinita.
- Ottenere informazioni su una configurazione della shell per un utente o un gruppo specifico.
Le modifiche non diventano effettive fino a quando un utente non accede.
Avviare shell diverse per account utente diversi
Per impostazione predefinita, Shell Launcher esegue la shell predefinita, specificata quando si crea l'immagine del sistema operativo in fase di progettazione. La shell predefinita è impostata su Cmd.exe, ma è possibile specificare qualsiasi file eseguibile come shell predefinita.
È possibile configurare Shell Launcher per avviare una shell diversa per utenti o gruppi specifici se non si vuole eseguire la shell predefinita. Ad esempio, è possibile configurare un dispositivo per eseguire una shell dell'applicazione personalizzata per gli account guest, ma eseguire la shell di Esplora risorse standard per gli account amministratore per gestire il dispositivo.
Se si usano i provider WMI per configurare Shell Launcher per un utente o un gruppo in fase di esecuzione, è necessario usare l'identificatore di sicurezza (SID) per tale utente o gruppo; non è possibile usare il nome utente o il nome del gruppo.
Per altre informazioni sugli identificatori di sicurezza comuni, vedere SID noti.
Quando l'account di accesso corrente appartiene a due o più gruppi con configurazioni diverse definite per ogni gruppo, Shell Launcher usa la prima configurazione trovata. L'ordine di ricerca non è definito, pertanto è consigliabile evitare di assegnare un utente a più gruppi con configurazioni di Avvio shell diverse.
Eseguire un'azione quando la shell esce
Quando una shell personalizzata viene chiusa, Shell Launcher può eseguire una delle quattro azioni seguenti:
Azione | Descrizione |
---|---|
0 | Riavviare la shell. |
1 | Riavvia il dispositivo. |
2 | Arrestare il dispositivo. |
3 | Non fare nulla. |
Importante
Assicurarsi che l'applicazione shell non venga chiusa automaticamente e non venga chiusa automaticamente da alcuna funzionalità, ad esempio filtro finestra di dialogo, in quanto ciò può causare un ciclo infinito di chiusura e riavvio, a meno che l'azione di codice restituito non sia impostata su nessuna operazione.
Azione predefinita per il codice restituito
È possibile definire un'azione di codice restituito predefinita per Avvio shell con l'impostazione DefaultReturnCodeAction. Se non si modifica il valore iniziale, l'azione di codice restituito predefinita è impostata su 0 (zero), che indica che Avvio shell riavvia la shell quando la shell esce.
Eseguire il mapping del codice di uscita a un'azione di avvio shell
Shell Launcher può eseguire un'azione specifica in base al codice di uscita restituito dalla shell. Per qualsiasi codice di uscita specificato restituito dalla shell, è possibile configurare l'azione eseguita da Shell Launcher eseguendo il mapping del codice di uscita a una delle azioni di uscita della shell.
Se il codice di uscita non corrisponde a un valore definito, Shell Launcher esegue l'azione predefinita del codice restituito.
Ad esempio, la shell potrebbe restituire valori di codice di uscita pari a -1, 0, 1 o 255 a seconda della modalità di uscita della shell. È possibile configurare Shell Launcher per:
- riavviare il dispositivo (1) quando la shell restituisce un codice di uscita di valore -1
- riavviare la shell (0) quando la shell restituisce un codice di uscita del valore 0
- non eseguire alcuna operazione (3) quando la shell restituisce un codice di uscita del valore 1
- arrestare il dispositivo (2) quando la shell restituisce un codice di uscita del valore 255
Il mapping dell'azione di codice restituito personalizzato sarà simile al seguente:
Codice di uscita | Azione |
---|---|
-1 | 1 (riavviare il dispositivo) |
0 | 0 (riavviare la shell) |
1 | 3 (non fare nulla) |
255 | 2 (arrestare il dispositivo) |
Impostare la shell personalizzata
Modificare lo script di PowerShell seguente in base alle esigenze ed eseguire lo script nel 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
Lo script precedente include esempi di più opzioni di configurazione, tra cui la rimozione di una shell personalizzata e la disabilitazione dell'utilità di avvio della shell. Non è progettato per essere eseguito così come è.
Diritti utente dell'utilità di avvio shell
Viene avviata una shell personalizzata con lo stesso livello di diritti utente dell'account che ha effettuato l'accesso. Ciò significa che un utente con diritti di amministratore può eseguire qualsiasi azione di sistema che richiede diritti di amministratore, incluso l'avvio di altre applicazioni con diritti di amministratore, mentre un utente senza diritti di amministratore non può.
Warning
Se l'applicazione shell richiede diritti di amministratore e deve essere con privilegi elevati e controllo dell'account utente è presente nel dispositivo, è necessario disabilitare l'account utente affinché Shell Launcher avvii l'applicazione shell.