UnauthorizedAccessException при использовании ShutdownManager даже с объявленным systemManagement

Примечание: не дублировать это, так как я уже заявляю systemManagement вместимость.

ОБНОВЛЕНИЕ: API доступен только для устройств IoT, если вы хотите API для UWP, проголосуйте здесь.

У меня есть простое приложение UWP, которое имеет как целевую, так и минимальную версию 2004 (Build 19041). Пользовательский интерфейс просто имеет две кнопки «Завершение работы» и «Перезагрузка»:

private void OnShutDownClicked(object sender, RoutedEventArgs e)
{
    ShutdownManager.BeginShutdown(ShutdownKind.Shutdown, TimeSpan.FromSeconds(1));
}

private void OnRestartCLicked(object sender, RoutedEventArgs e)
{
    ShutdownManager.BeginShutdown(ShutdownKind.Restart, TimeSpan.Zero);
}

Следуя документу, я добавил systemManagement емкость в манифест с помощью пользовательского интерфейса, а также перепроверил XML-код:

<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"
  xmlns:iot = "http://schemas.microsoft.com/appx/manifest/iot/windows10"
  IgnorableNamespaces = "uap mp iot">
  ...
  <Capabilities>
    <iot:Capability Name = "systemManagement"/>
  </Capabilities>
  ...

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

System.UnauthorizedAccessException: «Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))'

Я что-то пропустил? Как решить эту проблему?


ОБНОВЛЕНИЕ: поэтому я попытался добавить эту строку, чтобы проверить, действительно ли у меня есть доступ к этой емкости:

var temp = ShutdownManager.IsPowerStateSupported(PowerState.ConnectedStandby);

Согласно doc, этот метод также требует такой же емкости. Тем не менее, код хорошо работает через него. Это означает, что что-то должно отсутствовать в BeginShutdown:


ОБНОВЛЕНИЕ 2. Очевидно, этот API предназначен только для устройств IoT? Могу ли я использовать этот API на устройстве с Windows Desktop или есть ли аналогичный API? Google всегда приводил меня туда, и альтернативы, похоже, не было.

Хммм... Я помню, когда UWP отказал в доступе к полному диску, даже когда ему было сказано разрешить его. Интересно, это что-то похожее?

Deleted 02.10.2022 13:07

@MickyD Я не знаю об этой проблеме. В этом случае необходимо дождаться официального ответа от MS. Я также подозреваю, что это только API-интерфейс устройства IoT, и я использую (и намерен использовать его на) настольную Windows. Кстати, почему тег winrt (window-runtime) удален? Я думал, что это WinRT или это даже другая платформа (я знаю, что платформы MS сбивают с толку)?

Luke Vo 02.10.2022 13:10

Ой, извините, я не знал, что вы на самом деле используете WinRT API. Как правило, UWP — это не WinRT. :)

Deleted 02.10.2022 13:18

@MickyD Подождите, правда, лол? Почему? Я думал, что UWP и WinRT — это одно и то же (может быть, UWP = WinRT + XAML UI?). Я готов к уроку истории, если вы можете связать меня с ним :)

Luke Vo 02.10.2022 13:19

Нет, WinRT — это API на основе COM, изначально разработанный для первых планшетов Microsoft.

Deleted 02.10.2022 13:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Спасибо за подтверждение. Будет ли когда-нибудь доступен такой API? Кто-нибудь предлагал что-то подобное, или команда решила, что этого никогда не будет?

Luke Vo 03.10.2022 08:40

@LukeVo Вы можете отправить запрос на эту функцию в Центре обратной связи. Вы можете найти Центр обратной связи в меню «Пуск». Пожалуйста, выберите Платформа разработчика-> API Feedback в качестве категории при отправке запроса. Соответствующая команда проверит запрос.

Roy Li - MSFT 03.10.2022 09:34

Другие вопросы по теме