Приложения киоска для назначенного доступа: рекомендации

В Windows 10 можно использовать назначенный доступ для создания устройства киоска, что позволяет пользователям взаимодействовать только с одним универсальным приложением Windows. В этой статье описывается, как реализовать приложение киоска и рекомендации.

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

  1. Интерфейс киоска с одним приложением

    Назначьте одно приложение учетной записи. Когда пользователь входит в систему, он будет иметь доступ только к этому приложению и ничего другого в системе. В течение этого времени устройство киоска заблокировано, при этом приложение киоска работает над экраном блокировки. Этот интерфейс часто используется для общедоступных киосков. Дополнительные сведения см. в разделе "Настройка киоска" в Windows 10 Pro, Enterprise или Education .

  2. Возможности киоска с несколькими приложениями (доступны в Windows 10 версии 1709 и более поздних версиях)

    Вы можете назначить одному или нескольким приложениям учетной записи. Когда пользователь входит в систему, устройство запускается в ограниченной оболочке с доступом только к выбранным приложениям. Дополнительные сведения см. в статье "Создание киоска с Windows 10" для запуска нескольких приложений .

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

Условия

Срок Description
назначенный доступ Функция, которая позволяет системным администраторам управлять взаимодействием пользователя путем ограничения точек входа приложения, предоставляемых пользователю устройства. Например, вы можете ограничить клиентов в бизнесе одним приложением, чтобы компьютер действовал как киоск. Каждый раз, когда кто-то входит с указанной учетной записью, он сможет использовать только одно приложение. Они не смогут переключать приложения или закрывать приложение с помощью сенсорных жестов, мыши, клавиатуры или аппаратных кнопок. Кроме того, они не увидят никаких уведомлений о приложении.
приложение блокировки (или приложение блокировки) Приложение, которое либо использует возможность задать динамические фоновые рисунки, либо использовать новую платформу расширения блокировки.
выше приложение экрана блокировки (или более поздней версии приложения блокировки) Приложение, которое запускается над экраном блокировки во время работы приложения экрана блокировки (например, при блокировке рабочего стола).
под блокировкой приложения Приложение, которое работает обычно в разблокированного контексте Windows.
LockApplicationHost Класс WinRT, который позволяет выше приложениям экрана блокировки запрашивать разблокировку устройства и позволяет приложению зарегистрировать уведомление при начале разблокировки устройства.
Представление представления или приложения Каждое представление — это отдельное окно в приложении. Приложение может иметь основное представление и создавать несколько и вторичных представлений по запросу. Дополнительные сведения см. в ApplicationView .

Расширение windows.aboveLockScreen

Назначенный доступ в Windows 10 использует платформу блокировки. Когда пользователь назначенного доступа входит в систему, фоновая задача блокирует рабочий стол и запускает приложение киоска над блокировкой. Поведение приложения может отличаться в зависимости от того, используется ли оно расширение windows.aboveLockScreen.

Использование windows.aboveLockScreen позволяет приложению киоска получить доступ к классу среды выполнения LockApplicationHost , что позволяет приложению знать, когда она выполняется над блокировкой (и, следовательно, работает как киоск). Если экземпляр не может быть возвращен, приложение выполняется в обычном контексте рабочего стола.

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

  • Защитите работу киоска, создав отдельную страницу для отображения содержимого только для киоска.

  • Вызовите метод LockApplicationHost.RequestUnlock() из приложения, чтобы добавить выход из режима назначенного доступа и вернуться на экран входа.

  • Добавьте обработчик событий в событие *LockApplicationHost.Unlocking , которое запускается при нажатии пользователем клавиш CTRL+ALT+Del, чтобы выйти из режима киоска. Обработчик также можно использовать для сохранения любых данных перед выходом.

Если у приложения нет расширения windows.aboveLockScreen , не создается дополнительное представление, а приложение запускается, как если бы оно выполнялось нормально. Кроме того, так как у приложения нет доступа к экземпляру LockApplicationHost, он не сможет определить, работает ли приложение в регулярном контексте или для киоска. Не включая расширение имеет преимущества, например возможность поддержки нескольких мониторов

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

Начиная с Windows 10 версии 1607, больше нет ограничений на расширение универсальная платформа Windows (UWP), поэтому большинство приложений можно отображать в Параметры, когда пользователь настраивает назначенный доступ.

Рекомендации

Этот раздел относится к приложению киоска, использующего расширение windows.aboveLockScreen .

Защита информации

Если приложение киоска предназначено для запуска как выше блокировки в назначенном доступе, так и в разблокированном контексте Windows, может потребоваться создать другую страницу для отображения выше блокировки, а также другую страницу под блокировкой. Это позволяет избежать отображения конфиденциальной информации в режиме киоска, так как режим киоска обычно означает анонимный доступ. Ниже приведены шаги, которые вы выполните для использования двух разных страниц, один для блокировки и один для выше блокировки:

  1. В переопределении функции OnLaunched в App.xaml.cs попробуйте получить экземпляр класса LockApplicationHost перед навигацией корневого кадра.

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

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

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

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

using Windows.ApplicationModel.LockScreen;

// inside the override OnLaunched function in App.xaml.cs

if (rootFrame.Content == null)
{
    LockApplicationHost host = LockApplicationHost.GetForCurrentView();
    if (host == null)
    {
        // if call to LockApplicationHost is null, this app is running under lock
        // render MainPage normally
        rootFrame.Navigate(typeof(MainPage), e.Arguments);
    }
    else
    {
        // If LockApplicationHost was successfully obtained
        // this app is running as a lock screen app, or above lock screen app
        // render a different page for assigned access use
        // to avoid showing regular main page to keep secure information safe
        rootFrame.Navigate(typeof(AssignedAccessPage), e.Arguments);
    }
}

Несколько представлений, окон и потоков

Начиная с Windows 10 версии 1803, в киоске поддерживаются несколько представлений для приложений, у которых нет расширения windows.aboveLockScreen . Чтобы использовать несколько представлений, убедитесь, что для устройства киоска задано значение "Расширить эти экраны".

Когда приложение с несколькими представлениями (и без windows.aboveLockScreen) запускается во время киоска, основное представление приложения будет отображаться на первом мониторе. Если новое представление создается приложением с помощью CreateNewView(), оно отображается во втором мониторе. Если приложение создает другое представление, оно перейдет на третий монитор и т. д.

Внимание

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

Когда приложение киоска имеет расширение windows.aboveLockScreen и работает над блокировкой, оно инициализировано по-другому. Его основное представление находится под блокировкой с дополнительным представлением над ним. Это дополнительное представление— это то, что видит пользователь. Даже если вы явно не создаете новые представления, у вас по-прежнему есть два представления в экземпляре приложения.

z-order для представлений, когда приложение работает в режиме блокировки.

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

using Windows.ApplicationModel.Core;

CoreApplication.GetCurrentView().IsMain //false
CoreApplication.Views.Count //2

Диспетчер

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

using Windows.ApplicationModel.Core;

private async void Button_Click(object sender, RoutedEventArgs e)
{
    button.IsEnabled = false;

    // start a background task and update UI periodically (every 1 second)
    // using MainView dispatcher in below code will end up with app crash
    // in assigned access mode, use GetCurrentView().Dispatcher instead
    await CoreApplication.GetCurrentView().Dispatcher.RunAsync(
        CoreDispatcherPriority.Normal,
        async () =>
        {
            for (int i = 0; i < 60; ++i)
            {
                // do some background work, here we use Task.Delay to sleep
                await Task.Delay(1000);
                // update UI
                textBlock1.Text = "   " + i.ToString();
            }
            button.IsEnabled = true;
        });
}

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

Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception

Из-за этого нельзя иметь несколько представлений или запускаться на нескольких мониторах. Если ваше приложение должно поддерживать это приложение, необходимо удалить расширение windows.aboveLockScreen из приложения.

Добавление выхода из назначенного доступа

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

LockApplicationHost^ lockHost = LockApplicationHost::GetForCurrentView();
    if (lockHost != nullptr)
    {
        lockHost->RequestUnlock();
    }

Управление жизненным циклом

Жизненный цикл приложения киоска обрабатывается платформой назначенного доступа. Если приложение заканчивается неожиданно, платформа пытается повторно запустить его. Однако если пользователь нажимает клавиши CTRL+ALT+Del, чтобы открыть экран входа, активируется событие разблокировки. Платформа назначенного доступа прослушивает событие и попытается завершить работу приложения.

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

using Windows.ApplicationModel.LockScreen;

public AssignedAccessPage()
{
    this.InitializeComponent();

    LockApplicationHost lockHost = LockApplicationHost.GetForCurrentView();
    if (lockHost != null)
    {
        lockHost.Unlocking += LockHost_Unlocking;
}
}

private void LockHost_Unlocking(LockApplicationHost sender, LockScreenUnlockingEventArgs args)
{
    // save any unsaved work and gracefully exit the app
    App.Current.Exit();
}

После нажатия клавиш CTRL+ALT+DEL и экрана входа в систему может произойти следующее:

  1. Пользователь знает пароль учетной записи доступа и разблокирует рабочий стол. Назначаемая платформа доступа запускается, блокирует рабочий стол и запускает приложение с экрана блокировки, которое, в свою очередь, запускает приложение киоска.

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

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

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

Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception

Приложение 1. Расширение UWP

В следующем примере манифеста приложения используется расширение UWP windows.aboveLockScreen.

Начиная с Windows 10 версии 1607, больше нет ограничений на расширение универсальная платформа Windows (UWP), поэтому большинство приложений можно отображать в Параметры, когда пользователь настраивает назначенный доступ.

<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
  <Identity Name="bd4df68b-dc18-4748-a14e-bc21dac13736" Publisher="Contoso" Version="1.0.0.0" />
  <mp:PhoneIdentity PhoneProductId="bd4df68b-dc18-4748-a14e-bc21dac13736" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
  <Properties>
    <DisplayName>AboveLock</DisplayName>
    <PublisherDisplayName>Contoso</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
  </Properties>
  <Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
  </Dependencies>
  <Resources>
    <Resource Language="x-generate" />
  </Resources>
  <Applications>
    <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AboveLock.App">
      <uap:VisualElements DisplayName="AboveLock" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="AboveLock" BackgroundColor="transparent">
        <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
        </uap:DefaultTile>
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
      <Extensions>
        <uap:Extension Category="windows.lockScreenCall" />
        <uap:Extension Category="windows.aboveLockScreen" />
      </Extensions>
    </Application>
  </Applications>
  <Capabilities>
    <Capability Name="internetClient" />
  </Capabilities>
</Package>

Приложение 2. Устранение неполадок

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

  1. Откройте Средство просмотра событий. Существует два места для поиска ошибок активации.

  2. В области Просмотр событий (локальные) разверните журналы Windows и выберите "Приложение".

  3. Кроме того, в Просмотр событий (локально) разверните журналы приложений и служб, разверните Windows, разверните узел "Приложения", а затем выберите Microsoft-Windows-TWinUI/Operational.

Так как приложения киоска с назначенным доступом не выполняются в полноэкранном режиме, ApplicationView.GetForCurrentView(). IsFullScreenMode возвращает значение false.

Назначенный доступ

Отображение нескольких представлений для приложения