Usare Shell Launcher per creare un chiosco multimediale Windows client

Si applica a

  • Windows 10 Ent, Edu
  • Windows 11

Usando Shell Launcher, è possibile configurare un dispositivo che esegue un'applicazione come interfaccia utente, sostituendo la shell predefinita (explorer.exe). In Shell Launcher v1, disponibile nel client Windows, è possibile specificare solo un'applicazione desktop Windows come shell sostitutiva. In Shell Launcher v2, disponibile in Windows 10 versione 1809+/Windows 11, è anche possibile specificare un'app UWP come shell sostitutiva. Per usare Shell Launcher v2 in Windows 10 versione 1809, è necessario installare l'aggiornamento KB4551853.

Nota

Shell Launcher controlla l'applicazione che l'utente vede come shell dopo l'accesso. Non impedisce all'utente di accedere ad altre applicazioni desktop e componenti di sistema.

I metodi di controllo dell'accesso ad altre applicazioni desktop e componenti di sistema possono essere usati oltre all'uso di Shell Launcher. Questi metodi includono, ma non si limitano a:

È possibile applicare una shell personalizzata tramite Shell Launcher usando PowerShell. A partire da Windows 10 versione 1803+, è anche possibile usare la gestione dei dispositivi mobili (MDM) per applicare una shell personalizzata tramite Shell Launcher.

Differenze tra Shell Launcher v1 e Shell Launcher v2

Shell Launcher v1 sostituisce explorer.exe, la shell predefinita, con eshell.exe la quale è possibile avviare un'applicazione desktop 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

Warning

  • Windows 10 non supporta l'impostazione di una shell personalizzata prima della configurazione guidata. In caso contrario, non sarai in grado di distribuire l'immagine risultante.

  • Avvio Shell non supporta una shell personalizzata con un'applicazione che avvia un processo diverso e quindi viene chiusa. Ad esempio, non è possibile specificare write.exe in Avvio Shell. 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. Dal momento che non è a conoscenza del processo wordpad.exe appena creato, Avvio Shell eseguirà un'azione in base al codice di uscita di Write.exe, ad esempio il riavvio della shell personalizzata.

  • Un dominio, Azure Active Directory o un account utente locale.

  • Un'applicazione Windows installata per tale account. L'app può essere un'applicazione aziendale o un'app comune come Internet Explorer.

Vedi la documentazione tecnica per il componente Avvio shell.

Abilitare la funzionalità di avvio della shell

Per impostare una shell personalizzata, è prima di tutto possibile attivare la funzionalità di avvio della shell e quindi impostare la shell personalizzata come predefinita usando PowerShell o MDM.

Per abilitare Avvio shell nelle funzionalità di Windows

  1. Passare a Programmi e funzionalità> Pannello di controllo >Attivare o disattivare le funzionalità di Windows.

  2. Espandi Blocco dispositivo.

  3. Seleziona Avvio shell , quindi OK.

In alternativa, è possibile attivare l'utilità di avvio della shell usando Progettazione configurazione di Windows in un pacchetto di provisioning oppure SMISettings > ShellLauncherè possibile usare lo strumento Di manutenzione e gestione delle immagini di distribuzione (DISM.exe).

Per attivare Avvio shell mediante DISM

  1. Apri il prompt dei comandi come amministratore.

  2. Immetti il comando seguente.

    Dism /online /Enable-Feature /all /FeatureName:Client-EmbeddedShellLauncher
    

Configurare una shell personalizzata in MDM

È possibile usare XML e un'impostazione OMA-URI personalizzata per configurare l'utilità di avvio della shell in MDM.

Configurazione di XML per Shell Launcher

L'esempio XML seguente funziona per Shell Launcher v1:

<?xml version="1.0" encoding="utf-8"?> 
<ShellLauncherConfiguration xmlns="http://schemas.microsoft.com/ShellLauncher/2018/Configuration"> 
  <Profiles> 
    <Profile ID="{24A7309204F3F-44CC-8375-53F13FE213F7}"> 
      <Shell Shell="%ProgramFiles%\Internet Explorer\iexplore.exe -k www.bing.com" /> 
    </Profile> 
  </Profiles> 
  <Configs>
    <!--local account-->
    <Account Name="ShellLauncherUser"/>
    <Profile ID="{24A7309204F3F-44CC-8375-53F13FE213F7}"/>
  </Configs>
</ShellLauncherConfiguration>

Per Shell Launcher v2, è possibile usare il tipo di app UWP per Shell specificando lo spazio dei nomi v2 e usare v2:AppType per specificare il tipo, come illustrato nell'esempio seguente. Se v2:AppType non viene specificato, implica che la shell è l'app Win32.

<?xml version="1.0" encoding="utf-8"?> 
<ShellLauncherConfiguration xmlns="http://schemas.microsoft.com/ShellLauncher/2018/Configuration" 
xmlns:v2="http://schemas.microsoft.com/ShellLauncher/2019/Configuration"> 
  <Profiles> 
    <DefaultProfile> 
      <Shell Shell="ShellLauncherV2DemoUwp_5d7tap497jwe8!App" v2:AppType="UWP" v2:AllAppsFullScreen="true"> 
        <DefaultAction Action="RestartShell"/> 
      </Shell> 
    </DefaultProfile> 
  </Profiles> 
  <Configs/> 
</ShellLauncherConfiguration>

Suggerimento

Nell'XML per Shell Launcher v2 prendere nota dell'attributo AllAppsFullScreen . Se impostato su True, Shell Launcher eseguirà ogni app a schermo intero o ingrandita per le app desktop. Quando questo attributo è impostato su False o non è impostato, solo l'app shell personalizzata viene eseguita a schermo intero; altre app avviate dall'utente verranno eseguite in modalità finestra.

Ottenere esempi XML per diverse configurazioni di Shell Launcher v2.

Impostazione personalizzata dell'URI OMA

Nel servizio MDM è possibile creare un'impostazione URI OMA personalizzata per configurare Shell Launcher v1 o v2. Il codice XML usato per l'impostazione determinerà se si applica Shell Launcher v1 o v2.

Il percorso URI OMA è ./Device/Vendor/MSFT/AssignedAccess/ShellLauncher.

Per il valore, è possibile selezionare il tipo di String dati e incollare il contenuto del file di configurazione desiderato nella casella del valore. Se si desidera caricare il file xml invece di incollare il contenuto, scegliere il tipo di String (XML file)dati .

Screenshot delle impostazioni uri OMA personalizzate.

Dopo aver configurato il profilo contenente l'impostazione di avvio della shell personalizzata, selezionare Tutti i dispositivi o i gruppi selezionati di dispositivi a cui applicare il profilo. Non assegnare il profilo a utenti o gruppi di utenti.

Configurare una shell personalizzata tramite PowerShell

Per gli script per Shell Launcher v2, vedere Shell Launcher v2 Bridge WMI sample scripts .for scripts for Shell Launcher v2, see Shell Launcher v2 Bridge WMI sample scripts.For scripts for Shell Launcher v2, shell Launcher v2 Bridge WMI scripts.

Per Shell Launcher v1, modificare lo script di PowerShell seguente in base alle esigenze. I commenti nello script di esempio spiegano lo scopo di ogni sezione e indicano dove dovrai modificare lo script per i tuoi scopi. Salva lo script con estensione PS1, apri Windows PowerShell come amministratore ed esegui lo script nel dispositivo in modalità tutto schermo.

# 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

# 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

azione predefinita, azione personalizzata, codice di uscita

L'utilità di avvio della shell definisce 4 azioni per gestire le uscite delle app, è possibile personalizzare l'utilità di avvio della shell e usare queste azioni in base a codice di uscita diverso.

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

Queste azioni possono essere usate come azione predefinita o possono essere mappate a un codice di uscita specifico. Fare riferimento a Shell Launcher per vedere come questi codici con SHELL Launcher WMI.

Per configurare queste azioni con CSP Di avvio shell, usare la sintassi seguente nel file xml di configurazione dell'utilità di avvio della shell. È possibile specificare al massimo 4 azioni personalizzate con mapping a 4 codici di uscita e un'azione predefinita per tutti gli altri codici di uscita. Quando l'app viene chiusa e se il codice di uscita non viene trovato nel mapping delle azioni personalizzate o non è definita alcuna azione predefinita, non verrà eseguita alcuna operazione, ovvero non si verifica nulla. È quindi consigliabile definire almeno DefaultAction. Ottenere esempi XML per diverse configurazioni di Shell Launcher v2.

<ReturnCodeActions>
    <ReturnCodeAction ReturnCode="0" Action="RestartShell"/>
    <ReturnCodeAction ReturnCode="-1" Action="RestartDevice"/>
    <ReturnCodeAction ReturnCode="255" Action="ShutdownDevice"/>
    <ReturnCodeAction ReturnCode="1" Action="DoNothing"/>
</ReturnCodeActions>
<DefaultAction Action="RestartDevice"/>