Shell-Startprogramm

Mithilfe des Shell-Startprogramms können Sie ein Kioskgerät so konfigurieren, dass fast jede Anwendung oder ausführbare Datei als benutzerdefinierte Shell verwendet wird. Die Anwendung, die Sie angeben, ersetzt die Standard-Shell (explorer.exe), die in der Regel ausgeführt wird, wenn sich ein Benutzer anmeldet.

Sie können das Shell-Startprogramm auch so konfigurieren, dass verschiedene Shellanwendungen für verschiedene Benutzer oder Benutzergruppen gestartet werden.

Es gibt einige Ausnahmen für die Anwendungen und ausführbaren Dateien, die Sie als benutzerdefinierte Shell verwenden können:

  • Sie können die folgende ausführbare Datei nicht als benutzerdefinierte Shell verwenden: C:\\Windows\\System32\\Eshell.exe. Wenn Sie Eshell.exe als Standardshell verwenden, wird nach der Anmeldung des Benutzers ein leerer Bildschirm angezeigt.
  • Sie können eine universelle Windows-App nicht als benutzerdefinierte Shell verwenden.
  • Sie können keine benutzerdefinierte Shell verwenden, um universelle Windows-Apps zu starten, z. B. die Einstellungs-App.
  • Sie können keine Anwendung verwenden, die einen anderen Prozess startet und als benutzerdefinierte Shell beendet wird. Beispielsweise können Siewrite.exeim Shell-Startprogramm nicht angeben. Das Shell-Startprogramm startet eine benutzerdefinierte Shell und überwacht den Prozess, um zu ermitteln, wann die benutzerdefinierte Shell beendet wird. Write.exe erstellt einen 32-Bit-wordpad.exe Prozess und endet. Da shell Launcher den neu erstellten wordpad.exe-Prozess nicht kennt, führt Shell Launcher Aktionen basierend auf dem Exitcode von Write.exeaus, und startet die benutzerdefinierte Shell neu.
  • Sie können nicht verhindern, dass das System heruntergefahren wird. Für Shell Launcher V1 und V2 können Sie das Beenden der Sitzung nicht blockieren, indem Sie false zurückgeben, wenn Sie die WM_QUERYENDSESSION Nachricht in einer grafischen Anwendung empfangen oder FALSE in der Handlerroutine zurückgeben, die über die SetConsoleCtrlHandler-Funktion in einer Konsolenanwendung hinzugefügt wird.

Hinweis

Sie können nicht sowohl das Shell-Startprogramm als auch den zugewiesenen Zugriff auf demselben System konfigurieren.

Verwenden Sie Shell-Startprogramm V2, dann können Sie eine universelle Windows-App als benutzerdefinierte Shell angeben. Überprüfen Sie die Verwendung des Shell-Startprogramms, um einen Windows 10 Kiosk auf die Unterschiede zwischen Shell-Startprogramm v1 und Shell-Startprogramm V2.

Das Shell-Startprogramm verarbeitet die Run- und RunOnce-Registrierungsschlüssel vor dem Starten der benutzerdefinierten Shell, sodass Ihre benutzerdefinierte Shell nicht den automatischen Start anderer Anwendungen und Dienste verarbeiten muss.

Das Shell-Startprogramm verarbeitet auch das Verhalten des Systems, wenn die benutzerdefinierte Shell beendet wird. Sie können das Verhalten zum Beenden der Shell konfigurieren, wenn das Standardverhalten Nicht Ihren Anforderungen entspricht.

Methoden zur Steuerung des Zugriffs auf andere Desktopanwendungen und Systemkomponenten können zusätzlich zur Verwendung des Shell-Startprogramms wie Gruppenrichtlinie, AppLocker und Mobile Geräteverwaltung

Hinweis

In Shell Launcher v1, das in Windows 10 verfügbar ist, können Sie nur eine Windows-Desktopanwendung als Ersatzshell angeben. In Shell Launcher v2, verfügbar in Windows 10, Version 1809 und höher, können Sie auch eine UWP-App als Ersatzshell angeben.

Um Shell Launcher v2 in Version 1809 verwenden zu können, müssen Sie das Update KB4551853 installieren.

Unterschiede zwischen Shell Launcher v1 und Shell Launcher v2

Shell Launcher v1 ersetzt explorer.exedie Standardshell durch eshell.exe, die eine Windows-Desktopanwendung starten kann. Shell Launcher v2 ersetzt explorer.exe durch customshellhost.exe. Diese neue ausführbare Datei kann eine Windows-Desktopanwendung oder eine UWP-App starten. Neben der Möglichkeit, eine UWP-App für Ihre Ersatzshell zu verwenden, bietet Shell Launcher v2 weitere Verbesserungen:

  • Sie können eine benutzerdefinierte Windows-Desktopanwendung verwenden, die dann UWP-Apps starten kann, z. B. Einstellungen und Tastatureingabe.
  • Ü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. Beispiel-XML-Konfigurationen für die verschiedenen App-Kombinationen finden Sie unter Beispiele für Shell Launcher v2.

Anforderungen

Windows 10 Enterprise oder Windows 10 Education.

Begriff

  • Einschalten, aktivieren: Um die Einstellung für das Gerät verfügbar zu machen und die Einstellungen optional auf das Gerät anzuwenden.
  • Konfigurieren: So passen Sie die Einstellungen oder Untersätze an.
  • Eingebettetes Shell-Startprogramm : Dieses Feature wird als eingebettetes Shell-Startprogramm in Windows 10, Version 1511, bezeichnet.
  • Benutzerdefiniertes Shell-Startprogramm: Dieses Feature wird als Shell-Startprogramm in Windows 10, Version 1607 und höher, bezeichnet.

Aktivieren des Shell-Startprogramms

Shell Launcher ist eine optionale Komponente und nicht standardmäßig in Windows 10 aktiviert. Es muss vor der Konfiguration eingeschaltet werden. Sie können das Shell-Startprogramm in einem benutzerdefinierten Windows 10-Image (WIM) aktivieren und konfigurieren, wenn Microsoft Windows nicht installiert wurde. Wenn Windows bereits installiert wurde, müssen Sie das Shell-Startprogramm aktivieren, bevor Sie ein Bereitstellungspaket zum Konfigurieren des Shell-Startprogramms anwenden.

Aktivieren des Shell-Startprogramms mithilfe von Systemsteuerung

  1. Geben Sie im Feld Web und Windows durchsuchen den Namen Programme und Features ein, und drücken Sie entweder die EINGABETASTE , oder tippen oder wählen Sie Programme und Features aus, um sie zu öffnen.
  2. Wählen Sie im Fenster Programme und Featuresdie Option Windows-Features aktivieren oder deaktivieren aus.
  3. Erweitern Sie im Fenster Windows-Features den Knoten Gerätesperrung , aktivieren oder deaktivieren Sie das Kontrollkästchen für Shell Launcher, und wählen Sie dann OK aus.
  4. Das Fenster Windows-Features gibt an, dass Windows nach erforderlichen Dateien sucht und zeigt eine Statusleiste an. Nachdem sie gefunden wurden, meldet das Fenster, dass Windows die Änderungen anwendet. Nach Abschluss gibt das Fenster an, dass die angeforderten Änderungen abgeschlossen sind.
  5. Wählen Sie Schließen aus, um das Fenster Windows-Features zu schließen.

Hinweis

Das Aktivieren des Shell-Startfelds erfordert keinen Geräteneustart.

Aktivieren des Shell-Startfelds durch Aufrufen von „WESL_UserSetting“

  1. Aktivieren oder deaktivieren Sie das Shell-Startprogramm, indem Sie die Funktion „WESL_UserSetting.SetEnabled“ in der Windows-Verwaltungsinstrumentation (WMI)-Klasse „WESL_UserSetting“ aufrufen.
  2. Wenn Sie das Shell-Startprogramm mit WESL_UserSetting aktivieren oder deaktivieren, wirken sich die Änderungen nicht auf sitzungen aus, die derzeit angemeldet sind. Sie müssen sich abmelden und sich wieder anmelden.

In diesem Beispiel wird ein Windows-Image namens install.wim verwendet, Sie können jedoch dasselbe Verfahren verwenden, um ein Bereitstellungspaket anzuwenden (weitere Informationen zu DISM finden Sie unter Was ist die Abbildverwaltung für die Bereitstellung.

Aktivieren des Shell-Startprogramms mithilfe von DISM

  1. Öffnen Sie eine Eingabeaufforderung mit Administratorrechten.

  2. Kopieren Sie install.wim in einen temporären Ordner auf der Festplatte (in den folgenden Schritten wird davon ausgegangen, dass es C:\wim heißt).

  3. Erstellen Sie ein neues Verzeichnis.

    md c:\wim
    
  4. Montiere das Bild.

    dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
    
  5. Aktivieren Sie das Feature.

    dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
    
  6. Führe für die Änderung einen Commit aus.

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

Aktivieren Sie das Shell-Startprogramm mithilfe des Windows-Designers für die Imagekonfiguration

Die Einstellungen für das Shell-Startprogramm sind auch als Windows-Bereitstellungseinstellungen verfügbar, sodass Sie auch festlegen können, dass diese Einstellungen während der Image-Laufzeit angewendet werden. Sie können eine oder alle Shell-Startprogrammeinstellungen festlegen, indem Sie ein Bereitstellungspaket mithilfe des Windows-Designers für die Imagekonfiguration erstellen und dann das Bereitstellungspaket während der Image-Bereitstellungszeit oder zur Laufzeit anwenden. Wenn Windows nicht installiert wurde und Sie windows Configuration Designer verwenden, um Installationsmedien mit Einstellungen für shell Launcher zu erstellen, die im Image enthalten sind, oder Wenn Sie während des Setups ein Bereitstellungspaket anwenden, müssen Sie shell Launcher auf dem Installationsmedium mit DISM aktivieren, damit ein Bereitstellungspaket erfolgreich angewendet werden kann.

Verwenden Sie die folgenden Schritte, um ein Bereitstellungspaket zu erstellen, das die Shell-Startprogrammeinstellungen enthält.

  1. Erstellen Sie ein Bereitstellungspaket im Windows-Designer für die Imagekonfiguration, indem Sie den Anweisungen in Erstellen eines Bereitstellungspakets für Windows 10 folgen.
  2. Wählen Sie auf der Seite Verfügbare Anpassungen die Laufzeiteinstellungen>SMISettings>ShellLauncher aus.
  3. Legen Sie den Wert Aktivieren auf ENABLE fest. Weitere Optionen zum Konfigurieren des Shell-Startprogramms werden angezeigt, und Sie können die Werte wie gewünscht festlegen.
  4. Nachdem Sie die Konfiguration der Einstellungen und das Erstellen des Bereitstellungspakets abgeschlossen haben, können Sie das Paket während der Imagebereitstellung oder zur Laufzeit anwenden. Weitere Informationen finden Sie unter Anwenden eines Bereitstellungspakets. Der Prozess zum Anwenden des Pakets auf ein Windows 10 Enterprise-Image ist identisch.

Konfigurieren des Shell-Startprogramms

Es gibt zwei Möglichkeiten zum Konfigurieren des Shell-Startprogramms:

  1. In Windows 10, Version 1803, können Sie das Shell-Startprogramm mithilfe des ShellLauncher-Knotens des Konfigurationsdienstanbieters (CSP) für zugewiesenen Zugriff konfigurieren. Ausführliche Informationen finden Sie unter AssignedAccess-CSP. Wenn das Shell-Startprogramm mithilfe dieser Methode konfiguriert wird, dann wird es außerdem automatisch auf dem Gerät aktiviert, wenn es vom Gerät unterstützt wird.
  2. Verwenden Sie die WMI-Anbieter des Shell-Startprogramms direkt in einem PowerShell-Skript oder einer Anwendung.

Sie können die folgenden Optionen für das Shell-Startprogramm konfigurieren:

  • Aktivieren oder Deaktivieren des Shell-Startprogramms.
  • Geben Sie eine Shell-Konfiguration für einen bestimmten Benutzer oder eine bestimmte Gruppe an.
  • Entfernen Sie eine Shell-Konfiguration für einen bestimmten Benutzer oder eine bestimmte Gruppe.
  • Ändern Sie die Standard-Shell-Konfiguration.
  • Rufen Sie Informationen zu einer Shell-Konfiguration für einen bestimmten Benutzer oder eine bestimmte Gruppe ab.

Alle Änderungen werden erst wirksam, wenn sich ein Benutzer anmeldet.

Starten Sie verschiedene Shells für unterschiedliche Benutzerkonten

Standardmäßig wird das Shell-Startprogramm die Standard-Shell ausführen, die angegeben wird, wenn Sie das Betriebssystemimage zur Entwurfszeit erstellen. Die Standard-Shell ist auf Cmd.exe festgelegt, Sie können jedoch eine beliebige ausführbare Datei als Standard-Shell angeben.

Sie können shell Launcher so konfigurieren, dass eine andere Shell für bestimmte Benutzer oder Gruppen gestartet wird, wenn Sie die Standardshell nicht ausführen möchten. Sie können z. B. ein Gerät so konfigurieren, dass eine benutzerdefinierte Anwendungs-Shell für Gastkonten, aber die standardmäßige Windows Explorer-Shell für Administratorkonten ausgeführt wird, um das Gerät zu warten.

Wenn Sie die WMI-Anbieter verwenden, um das Shell-Startprogramm für einen Benutzer oder eine Gruppe zur Laufzeit zu konfigurieren, müssen Sie die Sicherheits-ID (SID) für diesen Benutzer oder diese Gruppe verwenden. Sie können den Benutzernamen oder Gruppennamen nicht verwenden.

Weitere Informationen zu allgemeinen Sicherheitsbezeichnern finden Sie unter Bekannte SIDs.

Wenn das aktuell angemeldete Konto zu zwei oder mehreren Gruppen gehört, bei denen unterschiedliche Konfigurationen für jede Gruppe definiert wurden, verwendet das Shell-Startfeld die erste Konfiguration, die es findet. Die Suchreihenfolge ist nicht definiert, daher sollten Sie vermeiden, einen Benutzer mehreren Gruppen mit unterschiedlichen Shell-Startprogrammkonfigurationen zuzuweisen.

Ausführen einer Aktion, wenn die Shell beendet wird

Wenn eine benutzerdefinierte Shell beendet wird, kann das Shell-Startprogramm eine von vier Aktionen ausführen:

Aktion BESCHREIBUNG
0 Starten Sie die Shell neu.
1 Starten Sie das Gerät neu.
2 Fahren Sie das Gerät herunter.
3 Sie unternehmen nichts.

Wichtig

Stellen Sie sicher, dass Ihre Shellanwendung nicht automatisch beendet wird und nicht automatisch von einem beliebigen Feature wie dem Dialogfilter geschlossen wird, da dies zu einem unendlichen Zyklus des Beendens und Neustartens führen kann, es sei denn, die Rückgabecodeaktion ist auf „nichts tun“ festgelegt.

Standard-Rückgabecodeaktion

Sie können eine Standard-Rückgabecodeaktion für das Shell-Startfeld mit der Einstellung „DefaultReturnCodeAction“ definieren. Wenn Sie den Anfangswert nicht ändern, wird die standardmäßige Rückgabecodeaktion auf 0 (Null) festgelegt, was angibt, dass das Shell-Startprogramm die Shell neu startet, wenn die Shell beendet wird.

Zuordnen des Exitcodes zu einer Shell-Startprogrammaktion

Das Shell-Startprogramm kann eine bestimmte Aktion basierend auf dem von der Shell zurückgegebenen Exitcode ausführen. Für jeden beliebigen von der Shell zurückgegebenen Exitcode können Sie die Aktion konfigurieren, die das Shell-Starprogramm ausführt, indem Sie den gewünschten Exitcode einer der Shell-Exitaktionen zuordnen.

Wenn der Exitcode nicht mit einem definierten Wert übereinstimmt, führt Shell Launcher die standardmäßige Rückgabecodeaktion aus.

Ihre Shell kann beispielsweise die Endcodewerte -1, 0, 1 oder 255 zurückgeben, je nachdem, wie die Shell beendet wird. Sie können das Shell-Startprogramm so konfigurieren, dass:

  • das Gerät neu gestartet wird (1), wenn die Shell einen Exitcode mit dem Wert -1 zurückgibt
  • die Shell neu gestartet wird (0), wenn die Shell einen Exitcode mit dem Wert 0 zurückgibt
  • nichts geschieht (3), wenn die Shell einen Exitcode mit dem Wert 1 zurückgibt
  • das Gerät heruntergefahren wird (2), wenn die Shell einen Exitcode mit dem Wert 255 zurückgibt

Ihre benutzerdefinierte Rückgabecodeaktions-Zuordnung würde wie folgt aussehen:

Exitcode Aktion
-1 1 (Neustart des Geräts)
0 0 (Neustart der Shell)
1 3 (Nichts unternehmen)
255 2 (Herunterfahren des Geräts)

Festlegen Ihrer benutzerdefinierten Shell

Ändern Sie das folgende PowerShell-Skript wie gewünscht, und führen Sie das Skript auf dem Gerä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
$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

Hinweis

Das vorherige Skript enthält Beispiele für mehrere Konfigurationsoptionen, einschließlich des Entfernens einer benutzerdefinierten Shell und des Deaktivierens des Shell-Startprogramms. Es ist nicht dazu gedacht, so ausgeführt zu werden, wie es ist.

Shell-Startprogramm-Benutzerrechte

Eine benutzerdefinierte Shell wird mit derselben Benutzerrechteebene wie das Konto gestartet, das angemeldet ist. Dies bedeutet, dass ein Benutzer mit Administratorrechten jede Systemaktion ausführen kann, die Administratorrechte erfordert, einschließlich des Startens anderer Anwendungen mit Administratorrechten, während ein Benutzer ohne Administratorrechte dies nicht tun kann.

Warnung

Wenn Ihre Shell-Anwendung Administratorrechte erfordert und heraufgestuft werden muss, und die Benutzerkontosteuerung (UAC) auf Ihrem Gerät vorhanden ist, müssen Sie UAC deaktivieren, um das Shell-Startprogramm zu starten.