Avvio shell

Usando Shell Launcher, è possibile configurare un dispositivo tutto schermo per usare quasi qualsiasi applicazione o eseguibile 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 alle applicazioni e ai file eseguibili che è possibile usare come shell personalizzata:

  • Non è possibile usare il file eseguibile seguente come shell personalizzata: C:\\Windows\\System32\\Eshell.exe. L'uso di Eshell.exe come shell predefinita comporterà una schermata vuota dopo l'accesso dell'utente.
  • Non è possibile usare un'app di Windows universale come shell personalizzata.
  • Non è possibile usare una shell personalizzata per avviare app di Windows universale, ad esempio l'app Impostazioni.
  • Non è possibile usare un'applicazione che avvia un processo diverso ed esce come shell personalizzata. Ad esempio, non è possibile specificare write.exe in Launcher shell. Shell Launcher avvia una shell personalizzata e monitora il processo per identificare quando la shell personalizzata viene chiusa. Write.exe crea un processo di wordpad.exe a 32 bit e termina. Poiché l'utilità di avvio della shell non è a conoscenza del processo di wordpad.exe appena creato, Shell Launcher esegue l'azione in base al codice di uscita di Write.exee riavviare la shell personalizzata.
  • Non è possibile impedire all'arresto del sistema. Per Shell Launcher V1 e V2, non è possibile bloccare la fine della sessione restituendo FALSE durante la ricezione del messaggio di WM_QUERYENDSESSION in un'applicazione grafica o la restituzione di FALSE nella routine del gestore aggiunta tramite la funzione SetConsoleCtrlHandler in un'applicazione console.

Nota

Non è possibile configurare sia l'utilità di avvio shell che l'accesso assegnato nello stesso sistema.

Usare Shell Launcher V2, è possibile specificare un'app di Windows universale come shell personalizzata. Per creare un tutto schermo Windows 10 per le differenze tra Shell Launcher v1 e Shell Launcher V2, selezionare Use Shell Launcher (Usare l'utilità di avvio shell per creare un chiosco multimediale di Windows 10 per le differenze tra Shell Launcher v1 e Shell Launcher V2).

Shell Launcher elabora le chiavi del Registro di sistema Run andRunOnce 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 viene chiusa. È possibile configurare il comportamento di uscita della shell se il comportamento predefinito non soddisfa le esigenze.

I metodi di controllo dell'accesso ad altre applicazioni desktop e componenti di sistema possono essere usati oltre all'uso del launcher 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 di 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 di Windows o un'app UWP. Oltre a consentire di usare 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 touch.
  • Da una shell UWP personalizzata è possibile avviare visualizzazioni secondarie ed eseguire su più monitor.
  • L'app della shell personalizzata viene eseguita a schermo intero e può eseguire altre app a schermo intero sulla richiesta dell'utente. Per le 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, abilitare: Per rendere disponibile l'impostazione per il dispositivo e applicare facoltativamente le impostazioni al dispositivo.
  • Configurare: Per personalizzare l'impostazione o le sottoimpostazioni.
  • Utilità di avvio della shell incorporata: Questa funzionalità è denominata Avvio shell incorporata in Windows 10 versione 1511.
  • Utilità di avvio di Shell personalizzate: Questa funzionalità è denominata Launcher shell in Windows 10, versione 1607 e successiva.

Attivare l'utilità di avvio della shell

L'utilità di avvio della shell è un componente facoltativo e non è attivata per impostazione predefinita in Windows 10. È necessario attivare prima della configurazione. È possibile attivare e configurare l'utilità di avvio della shell in un'immagine personalizzata Windows 10 (con estensione wim) se Microsoft Windows non è stato installato. Se Windows è già stato installato, è necessario attivare l'utilità di avvio shell prima di applicare un pacchetto di provisioning per configurare l'utilità di avvio shell.

Abilitare l'utilità di avvio di Shell usando Pannello di controllo

  1. Nel campo Cerca il Web e Windows digitare Programmi e funzionalità e premere INVIO o toccare o selezionare Programmi e funzionalità per aprirlo.
  2. Nella finestra Programmi e funzionalità selezionare Attiva o disattiva le funzionalità di Windows.
  3. Nella finestra Funzionalità di Windows espandere il nodo Blocco dispositivi , selezionare o deselezionare la casella di controllo Launcher shell e quindi selezionare OK.
  4. La finestra Funzionalità di Windows indica che Windows sta cercando file obbligatori e visualizza una barra di stato. Una volta trovato, la finestra indica che Windows applica le modifiche. Al termine, la finestra indica che le modifiche richieste vengono completate.
  5. Selezionare Chiudi per chiudere la finestra Funzionalità di Windows .

Nota

L'attivazione di Shell Launcher non richiede un riavvio del dispositivo.

Abilitare Launcher shell chiamando WESL_UserSetting

  1. Abilitare o disabilitare Launcher shell chiamando la funzione WESL_UserSetting.SetEnabled nella classe Strumentazione gestione Windows (WMI) WESL_UserSetting.
  2. Se si abilita o disabilita l'utilità di avvio shell usando WESL_UserSetting, le modifiche non influiscono sulle sessioni attualmente eseguite; è necessario disconnettersi e accedere.

In questo esempio viene usata un'immagine di 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.

Abilitare l'utilità di avvio della shell con GESTIONE dei dati

  1. Aprire un prompt dei comandi con privilegi di amministratore.

  2. Copiare install.wim in una cartella temporanea sul disco rigido (nei passaggi seguenti si presuppone che sia chiamato C:\wim).

  3. Creare una nuova directory.

    md c:\wim
    
  4. Montare l'immagine.

    dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
    
  5. Abilitare la funzionalità.

    dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
    
  6. Eseguire il commit della modifica.

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

Abilitare l'utilità di avvio della shell usando La configurazione di Windows Designer

Le impostazioni del launcher shell sono disponibili anche come impostazioni di provisioning di Windows in modo da poter configurare queste impostazioni da applicare durante il runtime di immagini. È possibile impostare una o tutte le impostazioni del launcher shell creando un pacchetto di provisioning usando La configurazione di Windows Designer e quindi applicando il pacchetto di provisioning durante l'ora di distribuzione dell'immagine o il runtime. Se Windows non è stato installato e si usa Configurazione di Windows Designer per creare supporti di installazione con le impostazioni per il launcher shell incluso nell'immagine oppure si sta applicando un pacchetto di provisioning durante l'installazione, è necessario abilitare Shell Launcher nel supporto di installazione con DISM per applicare correttamente un pacchetto di provisioning.

Usare la procedura seguente per creare un pacchetto di provisioning contenente le impostazioni di ShellLauncher.

  1. Creare un pacchetto di provisioning in Configurazione di Windows Designer seguendo le istruzioni riportate in Creare un pacchetto di provisioning per Windows 10.
  2. Nella pagina Personalizzazioni disponibili selezionare Impostazioni >di runtimeSMISettings>ShellLauncher.
  3. Impostare il valore di Abilita su ENABLE. Vengono visualizzate altre opzioni per configurare l'utilità di avvio della shell e è possibile impostare i valori in base alle esigenze.
  4. Dopo aver completato la configurazione delle impostazioni e la creazione del pacchetto di provisioning, è possibile applicare il pacchetto all'ora di distribuzione dell'immagine o al runtime. Per altre informazioni, vedere Applicare un pacchetto di provisioning . Il processo per applicare il pacchetto a un'immagine Windows 10 Enterprise è la stessa.

Configurare Avvio shell

Esistono due modi per configurare Shell Launcher:

  1. In Windows 10 versione 1803 è possibile configurare Il launcher shell usando il nodo ShellLauncher del provider di servizi di configurazione di accesso assegnato . Per informazioni dettagliate, vedere AssignedAccess CSP . La configurazione di Launcher shell usando questo metodo abilita automaticamente shell Launcher nel dispositivo, se il dispositivo lo supporta.
  2. Usare i provider WMI di Launcher shell direttamente in uno script o un'applicazione di PowerShell.

È possibile configurare le opzioni seguenti per Shell Launcher:

  • Abilitare o disabilitare l'utilità di avvio della shell.
  • Specificare una configurazione della shell per un utente o un gruppo specifici.
  • Rimuovere una configurazione della shell per un utente o un gruppo specifici.
  • Modificare la configurazione predefinita della shell.
  • Ottenere informazioni su una configurazione della shell per un utente o un gruppo specifici.

Le modifiche non sono 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 di applicazioni personalizzata per gli account guest, ma eseguire la shell standard di Esplora risorse di Windows per gli account amministratore per gestire il dispositivo.

Se si usano i provider WMI per configurare l'utilità di avvio della shell 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 connesso corrente appartiene a due o più gruppi con configurazioni diverse definite per ogni gruppo, Avvio shell usa la prima configurazione trovata. L'ordine di ricerca non è definito, quindi è consigliabile evitare di assegnare un utente a più gruppi con configurazioni di Avvio shell diverse.

Eseguire un'azione quando la shell viene chiusa

Quando una shell personalizzata viene chiusa, Shell Launcher può eseguire una delle quattro azioni seguenti:

Azione Descrizione
0 Riavviare la shell.
1 Riavviare il dispositivo.
2 Arrestare il dispositivo.
3 Non eseguire alcuna operazione.

Importante

Assicurarsi che l'applicazione shell non venga chiusa automaticamente e non venga chiusa automaticamente da alcuna funzionalità, ad esempio Filtro finestra di dialogo, perché ciò può causare un ciclo infinito di uscita e riavvio, a meno che l'azione del codice restituito non sia impostata su nulla.

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 predefinita del codice restituito è impostata su 0 (zero), che indica che l'utilità di avvio shell riavvia la shell all'uscita dalla shell.

Eseguire il mapping del codice di uscita a un'azione di Avvio shell

L'utilità di avvio della shell 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 Avvio shell 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 di -1, 0, 1 o 255 a seconda della modalità di uscita della shell. È possibile configurare l'utilità di avvio shell 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 di valore 0
  • non eseguire alcuna operazione (3) quando la shell restituisce un codice di uscita di valore 1
  • arrestare il dispositivo (2) quando la shell restituisce un codice di uscita di valore 255

Il mapping delle azioni del 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 di Avvio shell

Viene avviata una shell personalizzata con lo stesso livello di diritti utente dell'account connesso. 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ò.

Avviso

Se l'applicazione shell richiede diritti di amministratore e deve essere elevata e controllo dell'account utente è presente nel dispositivo, è necessario disabilitare controllo dell'account utente per consentire a Shell Launcher di avviare l'applicazione shell.