Shell-Startprogramm
Mithilfe des Shell-Startprogramms können Sie ein Kioskgerät so konfigurieren, dass nahezu 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
. Die Verwendung von Eshell.exe als Standardshell führt nach der Benutzeranmeldung zu einem leeren Bildschirm. - 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. Sie können z. B .write.exeim Shell-Startprogramm nicht 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 das Shell-Startprogramm den neu erstellten wordpad.exe Prozess nicht kennt, führt das Shell-Startprogramm 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.
Mithilfe des Shell-Startprogramms V2 können Sie eine universelle Windows-App als benutzerdefinierte Shell angeben. Aktivieren Sie Verwenden des Shell-Startprogramms, um einen Windows 10 Kiosk zu erstellen, um die Unterschiede zwischen Shell Launcher v1 und Shell Launcher V2 zu ermitteln.
Das Shell-Startprogramm verarbeitet die Registrierungsschlüssel "Run" und "RunOnce", bevor die benutzerdefinierte Shell gestartet wird, sodass Ihre benutzerdefinierte Shell den automatischen Start anderer Anwendungen und Dienste nicht verarbeiten muss.
Das Shell-Startprogramm behandelt auch das Verhalten des Systems, wenn Ihre benutzerdefinierte Shell beendet wird. Sie können das Verhalten beim Beenden der Shell konfigurieren, wenn das Standardverhalten Nicht Ihren Anforderungen entspricht.
Methoden zum Steuern des Zugriffs auf andere Desktopanwendungen und Systemkomponenten können zusätzlich zur Verwendung des Shell-Startprogramms wie Gruppenrichtlinie, AppLocker und Mobile Geräteverwaltung
Hinweis
Im Shell-Startprogramm v1, das in Windows 10 verfügbar ist, können Sie nur eine Windows-Desktopanwendung als Ersatzshell angeben. Im Shell-Startprogramm v2, das in Windows 10, Version 1809 und höher verfügbar ist, 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 KB4551853 Update installieren.
Unterschiede zwischen Shell-Startprogramm v1 und Shell-Startprogramm v2
Shell Launcher v1 ersetzt explorer.exe
die Standardshell durch eshell.exe
, wodurch eine Windows-Desktopanwendung gestartet werden kann.
Shell Launcher v2 ersetzt durch explorer.exe
customshellhost.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
Windows 10 Enterprise oder Windows 10 Education.
Terminologie
- Aktivieren, Aktivieren: Um die Einstellung für das Gerät verfügbar zu machen und optional die Einstellungen auf das Gerät anzuwenden.
- Konfigurieren: So passen Sie die Einstellungen oder Untereinstellungen an.
- Eingebettetes Shell-Startprogramm: Dieses Feature wird in Windows 10 Version 1511 als Eingebettetes Shell-Startprogramm bezeichnet.
- Benutzerdefiniertes Shell-Startprogramm: Dieses Feature wird in Windows 10 Version 1607 und höher als Shell-Startprogramm bezeichnet.
Aktivieren des Shell-Startprogramms
Das Shell-Startprogramm ist eine optionale Komponente und nicht standardmäßig in Windows 10 aktiviert. Sie muss vor der Konfiguration aktiviert werden. Sie können das Shell-Startprogramm in einem angepassten 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 mit Systemsteuerung
- Geben Sie im Feld Web und Windows durchsuchen die Zeichenfolge Programme und Features ein, und drücken Sie entweder die EINGABETASTE, oder tippen Sie auf Programme und Features , um sie zu öffnen.
- Wählen Sie im Fenster Programme und Features die Option Windows-Features aktivieren oder deaktivieren aus.
- Erweitern Sie im Fenster Windows-Features den Knoten Gerätesperre , aktivieren oder deaktivieren Sie das Kontrollkästchen für Shell-Startprogramm, und wählen Sie dann OK aus.
- Das Fenster Windows-Features gibt an, dass Windows nach erforderlichen Dateien sucht, und zeigt eine Statusanzeige an. Sobald das Fenster gefunden wurde, gibt das Fenster an, dass Windows die Änderungen anwendet. Nach Abschluss des Vorgangs gibt das Fenster an, dass die angeforderten Änderungen abgeschlossen wurden.
- Wählen Sie Schließen aus, um das Fenster Windows-Features zu schließen.
Hinweis
Zum Aktivieren des Shell-Startprogramms ist kein Geräteneustart erforderlich.
Aktivieren des Shell-Startprogramms durch Aufrufen von WESL_UserSetting
- Aktivieren oder deaktivieren Sie das Shell-Startprogramm, indem Sie die Funktion WESL_UserSetting.SetEnabled in der WMI-Klasse (Windows Management Instrumentation) WESL_UserSetting aufrufen.
- 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 wieder anmelden.
In diesem Beispiel wird ein Windows-Image namens install.wim verwendet, aber Sie können das gleiche Verfahren verwenden, um ein Bereitstellungspaket anzuwenden (weitere Informationen zu DISM finden Sie unter Was ist Die Imageverwaltung und -verwaltung der Bereitstellung?
Aktivieren des Shell-Startprogramms mithilfe von DISM
Öffnen Sie eine Eingabeaufforderung mit Administratorrechten.
Kopieren Sie install.wim in einen temporären Ordner auf der Festplatte (in den folgenden Schritten wird davon ausgegangen, dass er C:\wim heißt).
Erstellen Sie ein neues Verzeichnis.
md c:\wim
Binden Sie das Image ein.
dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
Aktivieren Sie das Feature.
dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
Committen Sie die Änderung.
dism /unmount-wim /MountDir:c:\wim /Commit
Aktivieren des Shell-Startprogramms mithilfe von Windows Configuration Designer
Die Shell-Startprogrammeinstellungen sind auch als Windows-Bereitstellungseinstellungen verfügbar, sodass Sie diese Einstellungen so konfigurieren können, dass sie während der Imagelaufzeit angewendet werden. Sie können eine oder alle Einstellungen für das Shell-Startprogramm festlegen, indem Sie ein Bereitstellungspaket mithilfe von Windows Configuration Designer erstellen und dann das Bereitstellungspaket während der Imagebereitstellungszeit oder -laufzeit anwenden. Wenn Windows nicht installiert wurde und Sie Windows Configuration Designer verwenden, um Installationsmedien mit Einstellungen für das Shell-Startprogramm zu erstellen, die im Image enthalten sind, oder Wenn Sie während des Setups ein Bereitstellungspaket anwenden, müssen Sie das Shell-Startprogramm auf dem Installationsmedium mit DISM aktivieren, damit ein Bereitstellungspaket erfolgreich angewendet werden kann.
Führen Sie die folgenden Schritte aus, um ein Bereitstellungspaket zu erstellen, das die ShellLauncher-Einstellungen enthält.
- Erstellen Sie ein Bereitstellungspaket in Windows Configuration Designer, indem Sie die Anweisungen unter Erstellen eines Bereitstellungspakets für Windows 10 befolgen.
- Wählen Sie auf der Seite Verfügbare Anpassungenlaufzeiteinstellungen>SMISettings>ShellLauncher aus.
- Legen Sie den Wert von Enable auf ENABLE fest. Weitere Optionen zum Konfigurieren des Shell-Startprogramms werden angezeigt, und Sie können die Werte wie gewünscht festlegen.
- Nachdem Sie die Konfiguration der Einstellungen und das Erstellen des Bereitstellungspakets abgeschlossen haben, können Sie das Paket auf die Imagebereitstellungszeit oder -runtime 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, das Shell-Startprogramm zu konfigurieren:
- In Windows 10 Version 1803 können Sie das Shell-Startprogramm mithilfe des Knotens ShellLauncher des Konfigurationsdienstanbieters (Assigned Access Configuration Service Provider, CSP) konfigurieren. Weitere Informationen finden Sie unter AssignedAccess CSP . Wenn Sie das Shell-Startprogramm mit dieser Methode konfigurieren, wird auch automatisch das Shell-Startprogramm auf dem Gerät aktiviert, wenn es vom Gerät unterstützt wird.
- Verwenden Sie die WMI-Anbieter des Shell-Startprogramms direkt in einem PowerShell-Skript oder einer PowerShell-Anwendung.
Sie können die folgenden Optionen für das Shell-Startprogramm konfigurieren:
- Aktivieren oder deaktivieren Sie das Shell-Startprogramm.
- Geben Sie eine Shellkonfiguration für einen bestimmten Benutzer oder eine bestimmte Gruppe an.
- Entfernen Sie eine Shellkonfiguration für einen bestimmten Benutzer oder eine bestimmte Gruppe.
- Ändern Sie die Standardshellkonfiguration.
- Abrufen von Informationen zu einer Shellkonfiguration für einen bestimmten Benutzer oder eine bestimmte Gruppe.
Alle Änderungen werden erst wirksam, wenn sich ein Benutzer anmeldet.
Starten verschiedener Shells für verschiedene Benutzerkonten
Standardmäßig führt das Shell-Startprogramm die Standardshell aus, die beim Erstellen des Betriebssystemimages zur Entwurfszeit angegeben wird. Die Standardshell ist auf Cmd.exe festgelegt, aber Sie können jede ausführbare Datei als Standardshell angeben.
Sie können das Shell-Startprogramm so konfigurieren, dass eine andere Shell für bestimmte Benutzer oder Gruppen gestartet wird, wenn Sie die Standardshell nicht ausführen möchten. Beispielsweise können Sie ein Gerät so konfigurieren, dass eine benutzerdefinierte Anwendungsshell für Gastkonten ausgeführt wird, aber die Standardmäßige Windows Explorer-Shell für Administratorkonten ausführen, 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 Sicherheits-IDs finden Sie unter Bekannte SIDs.
Wenn das aktuell angemeldete Konto zu zwei oder mehr Gruppen gehört, für die für jede Gruppe unterschiedliche Konfigurationen definiert sind, verwendet das Shell-Startprogramm die erste gefundene Konfiguration. Da die Suchreihenfolge nicht definiert ist, 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 | keine Aktion ausführen. |
Wichtig
Stellen Sie sicher, dass Ihre Shellanwendung nicht automatisch beendet wird und nicht automatisch durch Features wie Dialogfilter geschlossen wird, da dies zu einem endlosen Zyklus von Beenden und Neustarten führen kann, es sei denn, die Rückgabecodeaktion ist auf nichts festgelegt.
Standardmäßige Rückgabecodeaktion
Sie können eine standardmäßige Rückgabecodeaktion für das Shell-Startprogramm mit der Einstellung DefaultReturnCodeAction definieren. Wenn Sie den Anfangswert nicht ändern, wird die Standardmäßige Rückgabecodeaktion auf 0 (null) festgelegt. Dies bedeutet, dass das Shell-Startprogramm die Shell neu startet, wenn die Shell beendet wird.
Zuordnen des Exitcodes zu einer Shell-Startprogrammaktion
Das Shell-Startprogramm kann basierend auf dem von der Shell zurückgegebenen Exitcode eine bestimmte Aktion ausführen. Für jeden von der Shell zurückgegebenen Exitcode können Sie die Aktion des Shell-Startprogramms konfigurieren, indem Sie diesen 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 Exitcodewerte von -1, 0, 1 oder 255 zurückgeben, je nachdem, wie die Shell beendet wird. Sie können das Shell-Startprogramm für Folgendes konfigurieren:
- Starten Sie das Gerät (1) neu, wenn die Shell einen Exitcode mit dem Wert -1 zurückgibt.
- Starten Sie die Shell (0) neu, wenn die Shell einen Exitcode mit dem Wert 0 zurückgibt.
- Nichts tun (3), wenn die Shell einen Exitcode des Werts 1 zurückgibt
- Herunterfahren des Geräts (2), wenn die Shell einen Exitcode mit dem Wert 255 zurückgibt
Ihre benutzerdefinierte Rückgabecodeaktionszuordnung würde wie folgt aussehen:
Exitcode | Aktion |
---|---|
-1 | 1 (Gerät neu starten) |
0 | 0 (Shell neu starten) |
1 | 3 (nichts tun) |
255 | 2 (Gerät herunterfahren) |
Festlegen der benutzerdefinierten Shell
Ändern Sie das folgende PowerShell-Skript entsprechend, 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. Sie ist nicht für die ausführungsbasierte Ausführung vorgesehen.
Benutzerrechte des Shell-Startprogramms
Eine benutzerdefinierte Shell wird mit den gleichen Benutzerrechten wie das angemeldete Konto gestartet. 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 kann.
Warnung
Wenn Ihre Shellanwendung Administratorrechte erfordert und erhöht werden muss und die Benutzerkontensteuerung (User Account Control, UAC) auf Ihrem Gerät vorhanden ist, müssen Sie die UAC deaktivieren, damit das Shell-Startprogramm die Shellanwendung starten kann.