Verwenden des Shell-Startprogramms zum Erstellen eines Windows Client Kiosks

Gilt für

  • Windows 10 Ent, Edu
  • Windows 11

Mithilfe des Shell-Startprogramms können Sie ein Gerät konfigurieren, auf dem eine Anwendung als Benutzeroberfläche ausgeführt wird, wobei die Standardshell (explorer.exe) ersetzt wird. Im Shell-Startprogramm v1, das im Windows-Client verfügbar ist, können Sie nur eine Windows-Desktopanwendung als Ersatzshell angeben. Im Shell-Startprogramm v2, das in Windows 10 Version 1809+/Windows 11 verfügbar ist, können Sie auch eine UWP-App als Ersatzshell angeben. Um shell Launcher v2 in Windows 10 Version 1809 verwenden zu können, müssen Sie das Update KB4551853 installieren.

Hinweis

Das Shell-Startprogramm steuert, welche Anwendung dem Benutzer nach der Anmeldung als Shell angezeigt wird. Der Benutzer wird nicht daran gehindert, auf andere Desktopanwendungen und Systemkomponenten zuzugreifen.

Methoden zum Steuern des Zugriffs auf andere Desktopanwendungen und Systemkomponenten können zusätzlich zur Verwendung des Shell-Startprogramms verwendet werden. Diese Methoden umfassen, sind aber nicht beschränkt auf:

Sie können eine benutzerdefinierte Shell über das Shell-Startprogramm mithilfe von PowerShell anwenden. Ab Windows 10 Version 1803 und höher können Sie auch die Verwaltung mobiler Geräte (Mobile Device Management, MDM) verwenden, um eine benutzerdefinierte Shell über das Shell-Startfeld anzuwenden.

Unterschiede zwischen Shell-Startprogramm v1 und Shell-Startprogramm v2

Shell Launcher v1 ersetzt explorer.exedie Standardshell, mit eshell.exe der eine Windows-Desktopanwendung gestartet werden kann.

Shell Launcher v2 ersetzt durch explorer.execustomshellhost.exe. Diese neue ausführbare Datei kann eine Windows-Desktopanwendung oder eine UWP-App starten.

Shell Launcher v2 bietet nicht nur die Möglichkeit, eine UWP-App für Ihre Ersatzshell zu verwenden:

  • Sie können eine benutzerdefinierte Windows-Desktopanwendung verwenden, die dann UWP-Apps wie Einstellungen und Bildschirmtastatur starten kann.
  • Über eine benutzerdefinierte UWP-Shell können Sie sekundäre Ansichten starten und auf mehreren Monitoren ausführen.
  • Die benutzerdefinierte Shell-App wird im Vollbildmodus ausgeführt und kann andere Apps auf Wunsch des Benutzers im Vollbildmodus ausführen.

Xml-Beispielkonfigurationen für die verschiedenen App-Kombinationen finden Sie unter Beispiele für Shell-Startprogramm v2.

Anforderungen

Warnung

  • Windows 10 unterstützt das Festlegen einer benutzerdefinierten Shell vor der Windows-Willkommensseite nicht. Wenn Sie dies tun, können Sie das resultierende Image nicht bereitstellen.

  • Der Shell-Launcher unterstützt keine Custom-Shell in einer Anwendung die einen anderen Prozess hinzufügt und dann beendet hinzugefügt. Angenommen, Sie können nicht write.exe im Shell-Launcher angeben. Der Shell-Launcher startet eine benutzerdefinierte Shell und überwacht den Prozess, um zu identifizieren, wann die benutzerdefinierte Shell beendet wird. Write.exe erstellt einen 32-Bit-wordpad.exe-Prozess und wird beendet. Da der Shell-Launcher nicht über den Prozess des neu erstellten wordpad.exe informiert ist, wird der Shell-Launcher Aktion basierend auf der Exitcode von Write.exe aktiv (z. B., um die benutzerdefinierte Shell neu zu starten).

  • Eine Domäne, ein Azure Active Directory-Konto oder ein lokales Benutzerkonto.

  • Eine Windows-Anwendung, die für dieses Konto installiert ist. Die App kann eine unternehmenseigene Anwendung oder eine allgemeine Anwendung wie Internet Explorer sein.

Weitere Informationen finden Sie in der technischen Referenz für die Shell-Startprogrammkomponente.

Aktivieren des Shell-Startprogramms

Um eine benutzerdefinierte Shell festzulegen, aktivieren Sie zuerst das Feature Shell-Startprogramm und können dann Ihre benutzerdefinierte Shell mithilfe von PowerShell oder MDM als Standard festlegen.

So aktivieren Sie das Shell-Startprogramm in den Windows-Features

  1. Wechseln Sie zu Systemsteuerung >Programme und Features>Windows-Features aktivieren oder deaktivieren.

  2. Erweitern Sie Gerätesperrmodus.

  3. Wählen Sie Shell-Startprogramm und dann OK.

Alternativ können Sie das Shell-Startprogramm mithilfe des Windows-Konfigurations-Designers in einem Bereitstellungspaket aktivieren, SMISettings > ShellLauncheroder Sie können das DISM.exe-Tool (Deployment Image Servicing and Management) verwenden.

So aktivieren Sie das Shell-Startprogramm mithilfe von DISM

  1. Öffnen Sie eine Eingabeaufforderung mit Administratorrechten.

  2. Geben Sie den folgenden Befehl ein:

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

Konfigurieren einer benutzerdefinierten Shell in MDM

Sie können XML und eine benutzerdefinierte OMA-URI-Einstellung verwenden, um das Shell-Startprogramm in MDM zu konfigurieren.

XML für Die Konfiguration des Shell-Startfelds

Das folgende XML-Beispiel funktioniert für 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>

Für Shell-Startprogramm v2 können Sie den UWP-App-Typ für Shell verwenden, indem Sie den v2-Namespace angeben, und verwenden, v2:AppType um den Typ anzugeben, wie im folgenden Beispiel gezeigt. Wenn v2:AppType nicht angegeben ist, bedeutet dies, dass es sich bei der Shell um eine Win32-App handelt.

<?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>

Tipp

Beachten Sie im XML für Shell-Startprogramm v2 das Attribut AllAppsFullScreen . Wenn diese Einstellung auf True festgelegt ist, führt das Shell-Startprogramm jede App im Vollbildmodus oder maximiert für Desktop-Apps aus. Wenn dieses Attribut auf False oder nicht festgelegt festgelegt ist, wird nur die benutzerdefinierte Shell-App im Vollbildmodus ausgeführt. andere Apps, die vom Benutzer gestartet werden, werden im Fenstermodus ausgeführt.

Rufen Sie XML-Beispiele für verschiedene Konfigurationen des Shell-Startprogramms v2 ab.

Benutzerdefinierte OMA-URI-Einstellung

In Ihrem MDM-Dienst können Sie eine benutzerdefinierte OMA-URI-Einstellung erstellen, um shell Launcher v1 oder v2 zu konfigurieren. (Der XML-Code , den Sie für Ihre Einstellung verwenden, bestimmt, ob Sie das Shell-Startprogramm v1 oder v2 anwenden.)

Der OMA-URI-Pfad ist ./Device/Vendor/MSFT/AssignedAccess/ShellLauncher.

Für den Wert können Sie den Datentyp String auswählen und den gewünschten Inhalt der Konfigurationsdatei in das Wertfeld einfügen. Wenn Sie den XML-Code hochladen möchten, anstatt den Inhalt einzufügen, wählen Sie den Datentyp String (XML file)aus.

Screenshot der benutzerdefinierten OMA-URI-Einstellungen.

Nachdem Sie das Profil mit der benutzerdefinierten Shell-Startprogrammeinstellung konfiguriert haben, wählen Sie Alle Geräte oder ausgewählte Gerätegruppen aus, auf die das Profil angewendet werden soll. Weisen Sie das Profil nicht Benutzern oder Benutzergruppen zu.

Konfigurieren einer benutzerdefinierten Shell mithilfe von PowerShell

Skripts für Shell Launcher v2 finden Sie unter Shell Launcher v2 Bridge WMI-Beispielskripts.

Ändern Sie für Shell Launcher v1 das folgende PowerShell-Skript entsprechend. Die Kommentare im Beispielskript erklären Sie den Zweck der einzelnen Abschnitte und geben darüber Auskunft, wo Sie das Skript für Ihre Zwecke ändern sollten. Speichern Sie Ihr Skript mit der Erweiterung „.ps1“, öffnen Sie Windows PowerShell als Administrator, und führen Sie das Skript auf dem Kioskgerät aus.

# 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

Standardaktion, benutzerdefinierte Aktion, Exitcode

Das Shell-Startprogramm definiert vier Aktionen zum Verarbeiten von App-Exits. Sie können das Shell-Startfeld anpassen und diese Aktionen basierend auf unterschiedlichem Exitcode verwenden.

Wert Beschreibung
0 Neustarten der Shell
1 Starten Sie das Gerät neu.
2 Herunterfahren des Geräts
3 Nichts tun

Diese Aktion kann als Standardaktion verwendet oder einem bestimmten Exitcode zugeordnet werden. Unter Shell-Startprogramm erfahren Sie, wie diese Codes mit dem Shell-Startprogramm WMI verwendet werden.

Um diese Aktion mit dem Shell-Startprogramm-CSP zu konfigurieren, verwenden Sie die folgende Syntax in der XML-Konfigurationsdatei des Shell-Startprogramms. Sie können maximal vier benutzerdefinierte Aktionen angeben, die vier Exitcodes zugeordnet sind, und eine Standardaktion für alle anderen Exitcodes. Wenn die App beendet wird und der Exitcode in der benutzerdefinierten Aktionszuordnung nicht gefunden wird oder keine Standardaktion definiert ist, ist dies "no-op", d. h. es geschieht nichts. Daher wird empfohlen, mindestens DefaultAction zu definieren. Rufen Sie XML-Beispiele für verschiedene Konfigurationen des Shell-Startprogramms v2 ab.

<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"/>