注意:不重复https://stackoverflow.com/questions/50310257/error-code-when-trying-to-shutdown-using-uwp-and-c-sharp,因为我已经声明了systemManagement容量。
UPDATE:该API仅适用于IoT设备,如果您希望为UWP,在这里投票提供API。
我有一个简单的UWP应用程序,有目标和Min版本的2004 (Build 19041)。UI只需关闭两个按钮并重新启动:
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);
}在文档之后,我使用UI将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)例外)”

我错过了什么吗?我该怎么解决这个问题?
UPDATE:所以我尝试添加这一行来测试我是否真的可以访问这个容量:
var temp = ShutdownManager.IsPowerStateSupported(PowerState.ConnectedStandby);根据文档的说法,这种方法也需要相同的容量。但是,代码在其中运行得很好。这意味着BeginShutdown一定缺少了什么

更新2:很明显,这个API只适用于IoT设备?我可以在Windows桌面设备上使用这个API吗?或者有类似的API吗?谷歌总是带领我去那里,似乎没有别的选择。
发布于 2022-10-03 06:09:44
这个API是为IoT设备设计的,在UWP应用程序中不支持该功能。UWP应用程序运行在一个孤立的沙箱中,因此UWP应用程序对系统资源的访问有限,不允许访问这些系统功能,比如关闭设备。
https://stackoverflow.com/questions/73925242
复制相似问题