Использование средства запуска оболочки для создания терминала клиента Windows

Относится к:

  • Windows 10 Ent, Эду
  • Windows 11

С помощью средства запуска оболочки можно настроить устройство, которое запускает приложение в качестве пользовательского интерфейса, заменив оболочку по умолчанию (explorer.exe). В средстве запуска оболочки версии 1, доступном в клиенте Windows, можно указать только классическое приложение Windows в качестве заменяющего оболочки. В средстве запуска оболочки версии 2, доступной в Windows 10 версии 1809 или Windows 11, можно также указать приложение UWP в качестве заменяющего оболочки. Чтобы использовать средство запуска оболочки версии 2 в Windows 10 версии 1809, необходимо установить обновление KB4551853.

Примечание.

Средство запуска оболочки определяет, какое приложение пользователь видит в качестве оболочки после входа. Это не мешает пользователю получить доступ к другим классическим приложениям и системным компонентам.

В дополнение к средству запуска оболочки можно использовать методы управления доступом к другим классическим приложениям и системным компонентам. К этим методам относятся, помимо прочего, следующие:

Пользовательскую оболочку можно применить с помощью средства запуска оболочки с помощью PowerShell. Начиная с Windows 10 версии 1803 и более поздних версий, вы также можете использовать управление мобильными устройствами (MDM) для применения пользовательской оболочки с помощью средства запуска оболочки.

Различия между командой запуска оболочки версии 1 и командой запуска оболочки версии 2

Средство запуска оболочки explorer.exeверсии 1 заменяет оболочку по умолчанию, с eshell.exe помощью которой можно запускать классическое приложение Windows.

Средство запуска оболочки explorer.execustomshellhost.exeверсии 2 заменяется на . Этот новый исполняемый файл может запускать классическое приложение Windows или приложение UWP.

Помимо возможности использовать приложение UWP для замены оболочки, средство запуска оболочки версии 2 предлагает дополнительные улучшения:

  • Вы можете использовать пользовательское классическое приложение Windows, которое затем может запускать приложения UWP, такие как Параметры и Сенсорная клавиатура.
  • В пользовательской оболочке UWP можно запустить дополнительные представления и запустить на нескольких мониторах.
  • Пользовательское приложение оболочки выполняется в полноэкранном режиме и может запускать другие приложения в полноэкранном режиме по требованию пользователя.

Примеры конфигураций XML для различных сочетаний приложений см. в разделе Примеры для средства запуска оболочки версии 2.

Требования

Warning

  • Windows 10 не поддерживает настройку пользовательскую оболочку до запуска при первом включении компьютера. Если вы поддерживаете эту функцию, вы не сможете развернуть полученный образ.

  • Средства запуска оболочки не поддерживают пользовательскую оболочку с приложением, которое запускает другой процесс и затем завершает работу. Например, нельзя указать write.exe в средстве запуска оболочки. Средство запуска оболочки запускает пользовательскую оболочку и отслеживает процесс для идентификации завершения работы пользовательской оболочки. Write.exe создает 32-разрядный процесс wordpad.exe и завершает работу. Поскольку средство запуска оболочки не распознает созданный процесс wordpad.exe, средство запуска оболочки будет действовать в соответствии с кодом завершения Write.exe, например перезапуск пользовательской оболочки.

  • Домен, Azure Active Directory или учетная запись локального пользователя.

  • Приложение Windows, установленное для этой учетной записи. Можно использовать собственное приложение вашей компании или стандартное приложение типа Internet Explorer.

См. технический справочник по средству запуска оболочки.

Включение функции запуска оболочки

Чтобы задать настраиваемую оболочку, сначала включите функцию средства запуска оболочки, а затем можно задать настраиваемую оболочку по умолчанию с помощью PowerShell или MDM.

Включение средства запуска оболочки в компонентах Windows

  1. Перейдите > в раздел панель управления Программы и компоненты>Включение или отключение функций Windows.

  2. Разверните узел Блокировка устройств.

  3. Выберите Средство запуска оболочки и нажмите кнопку ОК.

Кроме того, можно включить средство запуска оболочки с помощью конструктора конфигураций Windows в пакете подготовки, используя SMISettings > ShellLauncher, или использовать средство обслуживания образов развертывания и управления ими (DISM.exe).

Включение средства запуска оболочки с помощью DISM

  1. Откройте окно командной строки от имени администратора.

  2. Введите следующую команду.

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

Настройка пользовательской оболочки в MDM

Для настройки средства запуска оболочки в MDM можно использовать XML и пользовательский параметр OMA-URI .

Xml для конфигурации средства запуска оболочки

Следующий пример XML работает для средства запуска оболочки версии 1:

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

Для средства запуска оболочки версии 2 можно использовать тип приложения UWP для Shell , указав пространство имен версии 2, и использовать v2:AppType для указания типа, как показано в следующем примере. Если v2:AppType параметр не указан, это означает, что оболочка является приложением 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>

Совет

В XML-файле для средства запуска оболочки версии 2 обратите внимание на атрибут AllAppsFullScreen . Если задано значение True, средство запуска оболочки будет запускать все приложения в полноэкранном режиме или развернуто для классических приложений. Если для этого атрибута задано значение False или не задано, в полноэкранном режиме выполняется только пользовательское приложение оболочки. другие приложения, запущенные пользователем, будут работать в оконном режиме.

Получите примеры XML для разных конфигураций средства запуска оболочки версии 2.

Настраиваемый параметр OMA-URI

В службе MDM можно создать настраиваемый параметр OMA-URI , чтобы настроить средство запуска оболочки версии 1 или 2. ( XML-код , используемый для параметра, определяет, применяется ли средство запуска оболочки версии 1 или 2.)

Путь OMA-URI — ./Device/Vendor/MSFT/AssignedAccess/ShellLauncher.

Для значения можно выбрать тип String данных и вставить требуемое содержимое файла конфигурации в поле значения. Если вы хотите отправить XML-файл вместо вставки содержимого, выберите тип String (XML file)данных .

Снимок экрана: настраиваемые параметры OMA-URI.

После настройки профиля, содержащего настраиваемый параметр средства запуска оболочки, выберите Все устройства или выбранные группы устройств, к которые нужно применить профиль. Не назначайте профиль пользователям или группам пользователей.

Настройка пользовательской оболочки с помощью PowerShell

Скрипты для средства запуска оболочки версии 2 см. в разделе Примеры скриптов WMI моста для запуска оболочки версии 2.

Для средства запуска оболочки версии 1 измените следующий скрипт PowerShell соответствующим образом. Комментарии в примере сценария поясняют назначение каждого раздела и подсказывают, где следует изменить сценарий для ваших целей. Сохраните сценарий с расширением .ps1, откройте Windows PowerShell от имени администратора и запустите его на устройстве в режиме терминала.

# 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

действие по умолчанию, пользовательское действие, код выхода

Средство запуска оболочки определяет 4 действия для обработки выхода приложения. Вы можете настроить средство запуска оболочки и использовать эти действия на основе разных кодов выхода.

Значение Описание
0 Перезапуск оболочки
1 Перезагрузите устройство
2 Завершение работы устройства
3 Ничего не делать

Эти действия можно использовать в качестве действия по умолчанию или сопоставить с определенным кодом выхода. Ознакомьтесь с командой запуска оболочки , чтобы узнать, как эти коды с помощью WMI средства запуска оболочки.

Чтобы настроить эти действия с помощью CSP средства запуска оболочки, используйте приведенный ниже синтаксис в xml-файле конфигурации средства запуска оболочки. Можно указать не более 4 настраиваемых действий, сопоставленных с 4 кодами выхода, и одно действие по умолчанию для всех остальных кодов выхода. Когда приложение завершает работу и код выхода не найден в пользовательском сопоставлении действий или не определено действие по умолчанию, он не будет оп, т. е. ничего не происходит. Поэтому рекомендуется по крайней мере определить DefaultAction. Получите примеры XML для разных конфигураций средства запуска оболочки версии 2.

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