API перезапуска

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

Определение

public static AppRestartFailureReason Restart(String arguments)

Параметры

arguments: строка

Аргументы для передачи в перезапущенный экземпляр.

Возвращаемое значение

API перезапуска возвращает .AppRestartFailureReason

Предварительные требования

Чтобы использовать API жизненного цикла приложения в Windows App SDK:

  1. Скачайте и установите последний выпуск Windows App SDK. Дополнительные сведения см. в статье Установка инструментов для Windows App SDK.
  2. Выполните инструкции по созданию простого проекта WinUI 3 или применению пакета SDK для приложений Windows в существующем проекте.

Что такое этот метод перезапуска?

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

  • Api Win32 RegisterApplicationRestart позволяет зарегистрировать приложение для перезапуска после завершения работы и предоставить произвольную строку командной строки для перезапущенного экземпляра. К причинам прекращения работы относятся сбой или зависание приложения, обновление приложения или обновление системы.

Однако для следующего сценария существует пробел:

  • Приложения Win32 могут регистрироваться в ОС для перезапуска в определенных состояниях приложения или ОС, но не могут инициировать перезапуск из работоспособного состояния.

Этот API перезапуска позволяет приложениям Win32 завершать и перезапускать по команде, а также соответствует существующему coreApplication.RequestRestartAsync.

Перезапуск с аргументами командной строки

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

Примеры

private void restartAfterUpdate()
{
    AppRestartFailureReason restartError = AppInstance.Restart(restartArgsInput);

    switch (restartError)
    {
        case AppRestartFailureReason.RestartPending:
            SendToast("Another restart is currently pending.");
            break;
        case AppRestartFailureReason.InvalidUser:
            SendToast("Current user is not signed in or not a valid user.");
            break;
        case AppRestartFailureReason.Other:
            SendToast("Failure restarting.");
            break;
    }
}

Чтобы просмотреть примеры перезапуска, посетите репозиторий WindowsAppSDK-Samples.