Поделиться через


Средство запуска оболочки

С помощью средства запуска оболочки можно настроить устройство киоска, чтобы использовать в качестве пользовательской оболочки практически любое приложение или исполняемый файл. Указанное вами приложение заменяет оболочку по умолчанию (explorer.exe), которая обычно запускается при входе пользователя в систему.

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

Существует несколько исключений из приложений и исполняемых файлов, которые можно использовать в качестве пользовательской оболочки:

  • В качестве пользовательской оболочки нельзя использовать следующий исполняемый файл: C:\\Windows\\System32\\Eshell.exe. Использование Eshell.exe в качестве оболочки по умолчанию приведет к пустому экрану после входа пользователя.
  • Вы не можете использовать универсальное приложение для Windows в качестве пользовательской оболочки.
  • Вы не можете использовать пользовательскую оболочку для запуска универсальных приложений для Windows, например приложения "Параметры".
  • Нельзя использовать приложение, которое запускает другой процесс и завершает работу в качестве пользовательской оболочки. Например, нельзя указать write.exe в командовом колонок оболочки. Средство запуска оболочки запускает пользовательскую оболочку и отслеживает процесс для идентификации завершения работы пользовательской оболочки. Write.exe создает 32-разрядный процесс wordpad.exe и завершает работу. Так как средство запуска оболочки не знает о созданном процессе wordpad.exe, средство запуска оболочки выполняет действие на основе кода выхода Write.exeи перезапускает пользовательскую оболочку.
  • Вы не можете предотвратить завершение работы системы. Для средства запуска оболочки версии 1 и 2 невозможно заблокировать завершение сеанса, возвращая значение FALSE при получении сообщения WM_QUERYENDSESSION в графическом приложении или возвращая FALSE в подпрограмме обработчика , добавляемой с помощью функции SetConsoleCtrlHandler в консольном приложении.

Примечание.

Невозможно настроить средство запуска оболочки и назначенный доступ в одной системе.

С помощью средства запуска оболочки версии 2 можно указать универсальное приложение для Windows в качестве пользовательской оболочки. Установите флажок Использовать средство запуска оболочки, чтобы создать киоск Windows 10, чтобы узнать о различиях между средством запуска оболочки версии 1 и командой запуска оболочки версии 2.

Средство запуска оболочки обрабатывает разделы реестра Run и RunOnce перед запуском пользовательской оболочки, поэтому настраиваемой оболочке не нужно обрабатывать автоматический запуск других приложений и служб.

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

В дополнение к средству запуска оболочки можно использовать методы управления доступом к другим классическим приложениям и системным компонентам, таким как, групповая политика, AppLocker и Mobile Управление устройствами

Примечание.

В средстве запуска оболочки версии 1, доступной в Windows 10, в качестве замены можно указать только классическое приложение Windows. В средстве запуска оболочки версии 2, доступной в Windows 10, версия 1809 и выше, можно также указать приложение UWP в качестве заменяющего оболочки.

Чтобы использовать средство запуска оболочки версии 2 в версии 1809, необходимо установить обновление KB4551853.

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

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

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

Требования

Windows 10 Корпоративная или Windows 10 для образовательных учреждений.

Терминология

  • Включите, включите: Чтобы сделать параметр доступным для устройства и при необходимости применить параметры к устройству.
  • Настроить: Настройка параметра или подмножества.
  • Внедренное средство запуска оболочки: Эта функция называется Embedded Shell Launcher в Windows 10 версии 1511.
  • Пользовательское средство запуска оболочки: Эта функция называется Оболочка запуска в Windows 10 версии 1607 и более поздних.

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

Средство запуска оболочки является необязательным компонентом и не включается по умолчанию в Windows 10. Перед настройкой его необходимо включить. Вы можете включить и настроить средство запуска оболочки в настроенном образе Windows 10 (WIM), если Microsoft Windows не установлена. Если Windows уже установлена, необходимо включить средство запуска оболочки перед применением пакета подготовки для настройки средства запуска оболочки.

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

  1. В поле Поиск в Интернете и Windows введите Программы и компоненты и нажмите клавишу ВВОД или коснитесь или выберите Программы и компоненты , чтобы открыть его.
  2. В окне Программы и компоненты выберите Включить или выключить компоненты Windows.
  3. В окне Компоненты Windows разверните узел Блокировка устройства , установите или снимите флажок средство запуска оболочки, а затем нажмите кнопку ОК.
  4. В окне Компоненты Windows указано, что Windows ищет необходимые файлы, и отображается индикатор выполнения. После обнаружения в окне появится сообщение о том, что Windows применяет изменения. По завершении в окне будет указано, что запрошенные изменения завершены.
  5. Нажмите кнопку Закрыть , чтобы закрыть окно Компоненты Windows .

Примечание.

Включение средства запуска оболочки не требует перезапуска устройства.

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

  1. Включите или отключите средство запуска оболочки, вызвав функцию WESL_UserSetting.SetEnabled в классе инструментария управления Windows (WMI) WESL_UserSetting.
  2. Если включить или отключить средство запуска оболочки с помощью WESL_UserSetting, изменения не повлияют на сеансы, которые в настоящее время вошли в систему. Вы должны выйти из нее и снова войти в систему.

В этом примере используется образ Windows с именем install.wim, но можно использовать ту же процедуру для применения пакета подготовки (дополнительные сведения о DISM см. в статье Обслуживание образов развертывания и управление ими.

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

  1. Откройте командную строку с правами администратора.

  2. Скопируйте install.wim во временную папку на жестком диске (в следующих шагах предполагается, что она называется C:\wim).

  3. Создайте новый каталог.

    md c:\wim
    
  4. Подключите образ.

    dism /mount-wim /wimfile:c:\bootmedia\sources\install.wim /index:1 /MountDir:c:\wim
    
  5. Включите эту функцию.

    dism /image:c:\wim /enable-feature /all /featureName:Client-EmbeddedShellLauncher
    
  6. Зафиксируйте изменение.

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

Включение средства запуска оболочки с помощью Designer конфигурации Windows

Параметры средства запуска оболочки также доступны в качестве параметров подготовки Windows, поэтому их можно настроить для применения во время выполнения образа. Вы можете задать один или все параметры средства запуска оболочки, создав пакет подготовки с помощью конфигурации Windows Designer, а затем применив пакет подготовки во время развертывания образа или во время выполнения. Если Windows не установлена и вы используете конфигурацию Windows Designer для создания установочного носителя с параметрами средства запуска оболочки, включенными в образ, или вы применяете пакет подготовки во время установки, необходимо включить средство запуска оболочки на установочном носителе с помощью DISM, чтобы пакет подготовки успешно применялся.

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

  1. Создайте пакет подготовки в конфигурации Windows Designer, следуя инструкциям в разделе Создание пакета подготовки для Windows 10.
  2. На странице Доступные настройки выберите Параметры> среды выполненияSMISettings>ShellLauncher.
  3. Задайте значение Enable ( Включить). Появятся дополнительные параметры для настройки средства запуска оболочки, и вы можете задать нужные значения.
  4. После завершения настройки параметров и создания пакета подготовки пакет можно применить к времени развертывания образа или среде выполнения. Дополнительные сведения см. в статье Применение пакета подготовки . Процесс применения пакета к образу Windows 10 Корпоративная выполняется так же.

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

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

  1. В Windows 10 версии 1803 можно настроить средство запуска оболочки с помощью узла ShellLauncher поставщика службы конфигурации назначаемого доступа (CSP). Дополнительные сведения см. в статье AssignedAccess CSP . Настройка средства запуска оболочки с помощью этого метода также автоматически включает средство запуска оболочки на устройстве, если устройство поддерживает его.
  2. Используйте поставщики WMI средства запуска оболочки непосредственно в скрипте или приложении PowerShell.

Для средства запуска оболочки можно настроить следующие параметры:

  • Включите или отключите средство запуска оболочки.
  • Укажите конфигурацию оболочки для определенного пользователя или группы.
  • Удалите конфигурацию оболочки для определенного пользователя или группы.
  • Измените конфигурацию оболочки по умолчанию.
  • Получение сведений о конфигурации оболочки для конкретного пользователя или группы.

Любые изменения не вступают в силу до тех пор, пока пользователь не войдет в систему.

Запуск разных оболочек для разных учетных записей пользователей

По умолчанию средство запуска оболочки запускает оболочку по умолчанию, которая указывается при создании образа ОС во время разработки. Оболочка по умолчанию имеет значение Cmd.exe, но можно указать любой исполняемый файл в качестве оболочки по умолчанию.

Вы можете настроить средство запуска оболочки для запуска другой оболочки для определенных пользователей или групп, если вы не хотите запускать оболочку по умолчанию. Например, можно настроить устройство для запуска пользовательской оболочки приложения для гостевых учетных записей, но для обслуживания устройства — стандартную оболочку windows Обозреватель для учетных записей администратора.

Если вы используете поставщики WMI для настройки средства запуска оболочки для пользователя или группы во время выполнения, необходимо использовать идентификатор безопасности (SID) для этого пользователя или группы. вы не можете использовать имя пользователя или группу.

Дополнительные сведения об общих идентификаторах безопасности см. в разделе Известные идентификаторы безопасности.

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

Выполнение действия при выходе из оболочки

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

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

Важно.

Убедитесь, что приложение оболочки не завершает работу автоматически и не закрывается автоматически с помощью таких функций, как фильтр диалогов, так как это может привести к бесконечному циклу выхода и перезапуска, если действие кода возврата не настроено на ничего не делать.

Действие кода возврата по умолчанию

Действие кода возврата по умолчанию для средства запуска оболочки можно определить с помощью параметра DefaultReturnCodeAction. Если не изменить начальное значение, для действия кода возврата по умолчанию устанавливается значение 0 (ноль), что указывает, что средство запуска оболочки перезапускает оболочку при выходе из оболочки.

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

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

Если код выхода не соответствует определенному значению, средство запуска оболочки выполняет действие кода возврата по умолчанию.

Например, оболочка может возвращать значения кода выхода из -1, 0, 1 или 255 в зависимости от способа выхода оболочки. Вы можете настроить средство запуска оболочки следующими способами:

  • перезапустите устройство (1), когда оболочка возвращает код выхода со значением -1
  • перезапуск оболочки (0), когда оболочка возвращает код выхода со значением 0
  • Ничего не делать (3), когда оболочка возвращает код выхода со значением 1
  • завершение работы устройства (2), когда оболочка возвращает код выхода со значением 255

Пользовательское сопоставление действия кода возврата будет выглядеть следующим образом:

Код выхода Действие
-1 1 (перезапуск устройства)
0 0 (перезапуск оболочки)
1 3 (ничего не делать)
255 2 (завершение работы устройства)

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

Измените следующий сценарий 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
$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

Примечание.

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

Права пользователя средства запуска оболочки

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

Warning

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