Verwenden des Shell-Startprogramms zum Erstellen eines Windows 10-Kiosks

Betrifft

  • Windows 10 Ent, Edu

Mithilfe von Startprogramm können Sie ein Gerät konfigurieren, auf dem eine Anwendung als Benutzeroberfläche ausgeführt wird, und dabei die Standardshell (explorer.exe). In Shell Startprogramm v1, verfügbar in Windows 10, können Sie nur eine Windows Desktopanwendung als Ersetzungsshell angeben. In Shell Startprogramm v2, verfügbar in Windows 10, Version 1809 und höher, können Sie auch eine UWP-App als Ersatzshell angeben. Um Shell Startprogramm Version 1809 zu verwenden, müssen Sie das Update KB4551853 installieren.

Hinweis

Shell Startprogramm, welche Anwendung dem Benutzer nach der Anmeldung als Shell angezeigt wird. Der Benutzer kann nicht auf andere Desktopanwendungen und Systemkomponenten zugreifen.

Methoden zum Steuern des Zugriffs auf andere Desktopanwendungen und Systemkomponenten können zusätzlich zur Verwendung der Shellanwendung Startprogramm. Diese Methoden umfassen, sind jedoch nicht auf Folgendes beschränkt:

Mithilfe von PowerShellkönnen Sie eine benutzerdefinierte Shell Startprogramm Shell anwenden. In Windows 10 Version 1803 und höher können Sie auch die Mobile Device Management (MDM) verwenden, um eine benutzerdefinierte Shell über shell-Startprogramm.

Unterschiede zwischen Shell Startprogramm v1 und Shell Startprogramm v2

Shell Startprogramm v1 ersetzt die Standardshell, mit der eine Windows explorer.exe eshell.exe gestartet werden kann.

Shell Startprogramm v2 wird durch explorer.exe customshellhost.exe ersetzt. Diese neue ausführbare Datei kann eine Windows oder eine UWP-App starten.

Neben der Verwendung einer UWP-App für Ihre Ersetzungsshell bietet Shell Startprogramm v2 zusätzliche Verbesserungen:

  • Sie können eine benutzerdefinierte Windows Desktopanwendung verwenden, die dann UWP-Apps, z. B. Einstellungen und Touchtastatur, starten kann. ****
  • In einer benutzerdefinierten 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 bei Bedarf im Vollbildmodus ausführen.

Beispiel-XML-Konfigurationen für die verschiedenen App-Kombinationen finden Sie unter Samples for Shell Startprogramm v2.

Anforderungen

Warnung

  • Windows10 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, Azure Active Directory oder ein lokales Benutzerkonto.

  • Eine Windows, 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 der Shell-Startprogramm-Funktion

Zum Festlegen einer benutzerdefinierten Shell aktivieren Sie zuerst das Shell-Startprogramm-Feature, und dann können Sie Ihre benutzerdefinierte Shell mit 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 shell Startprogramm mithilfe von Windows Configuration Designer in einem Bereitstellungspaket aktivieren, oder Sie können das Tool Für die Imagewartung und SMISettings > ShellLauncher -verwaltung (deployment Image Servicing and Management, DISM.exe) 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 shell-Startprogramm in MDM zu konfigurieren.

XML für shell Startprogramm Konfiguration

Das folgende XML-Beispiel funktioniert für Shell Startprogramm 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 v2können Sie den UWP-App-Typ verwenden, indem Sie den v2-Namespace angeben und den Typ angeben, wie im folgenden Beispiel Shell v2:AppType gezeigt. Wenn v2:AppType nicht angegeben, bedeutet dies, dass die Shell Win32-App ist.

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

Notieren Sie sich im XML für Shell Startprogramm v2 das AllAppsFullScreen-Attribut. Wenn sie auf Truefestgelegt ist, wird Startprogramm app im Vollbildmodus oder maximiert für Desktop-Apps ausgeführt. Wenn dieses Attribut auf False oder nicht festgelegt ist, wird nur die benutzerdefinierte Shell-App im Vollbildmodus ausgeführt. Andere vom Benutzer gestartete Apps werden im Fenstermodus ausgeführt.

Erhalten Sie XML-Beispiele für unterschiedliche Startprogramm v2-Konfigurationen.

Benutzerdefinierte OMA-URI-Einstellung

In Ihrem MDM-Dienst können Sie eine benutzerdefinierte OMA-URI-Einstellung zum Konfigurieren von Shell Startprogramm v1 oder v2 erstellen. (Die XML, die Sie für Ihre Einstellung verwenden, bestimmt, ob Sie 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 auswählen und den gewünschten Konfigurationsdateiinhalt String in das Feld Wert einfügen. Wenn Sie die XML hochladen möchten, anstatt den Inhalt zu verwenden, wählen Sie Datentyp String (XML file) aus.

Screenshot benutzerdefinierter OMA-URI-Einstellungen

Nachdem Sie das Profil mit der benutzerdefinierten Shell-Startprogramm 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 Startprogramm v2 finden Sie unter Shell Startprogramm v2 Bridge WMI-Beispielskripts.

Ändern Sie Startprogramm Version v1 das folgende PowerShell-Skript. 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

Shell launcher defines 4 actions to handle app exits, you can customize shell launcher and use these actions based on different exit code.

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

Diese Aktion kann als Standardaktion oder einem bestimmten Beendigungscode zugeordnet werden. Unter Shell Startprogramm, um zu erfahren, wie diese Codes mit Shell Startprogramm WMI sind.

Verwenden Sie zum Konfigurieren dieser Aktion mit shell Startprogramm CSP die folgende Syntax in der Shellstarterkonfigurations-XML. Sie können mindestens 4 benutzerdefinierte Aktionen angeben, die 4 Exitcodes zugeordnet sind, und eine Standardaktion für alle anderen Exitcodes. Wenn die App beendet wird und der Beendigungscode nicht in der benutzerdefinierten Aktionszuordnung gefunden wird oder keine Standardaktion definiert ist, ist dies no-op, d. h. es passiert nichts. Daher wird empfohlen, DefaultAction mindestens zu definieren. Erhalten Sie XML-Beispiele für unterschiedliche Startprogramm v2-Konfigurationen.

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