我的通用 Windows 平台软件是不是能够获得启动关机所需的权限?

Posted

技术标签:

【中文标题】我的通用 Windows 平台软件是不是能够获得启动关机所需的权限?【英文标题】:Is my Universal Windows Platform software able to gain the permission that is necessary for initiation of shutdown?我的通用 Windows 平台软件是否能够获得启动关机所需的权限? 【发布时间】:2021-02-24 07:53:20 【问题描述】:

我希望我的通用 Windows 平台软件能够在通过 1 次单击按钮调用它后关闭其主机,但是,到目前为止我尝试过的 0 个方法已经运行:

我试图指示 Windows 关闭,但 shutdown /s /t 120 无法操作,特别是在我的应用程序调用之后。

因此,我尝试使用原生 C# 代码。但是,使用它告诉我它不允许调用shutdown

ShutdownManager.BeginShutdown(Windows.System.ShutdownKind.Shutdown, TimeSpan.FromSeconds(120));

我使用了很多方法,但我无法解决这个问题。

相关文件

MainPage.xaml.cs

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System;
using Windows.System;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409.
// Delete the extra namespaces when the application is complete.

namespace Shutdown_Roulette

    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    
        public MainPage()
        
            this.InitializeComponent();
        

        private void Button_click(object sender, RoutedEventArgs e)
        
            ShutdownManager.BeginShutdown(Windows.System.ShutdownKind.Shutdown, TimeSpan.FromSeconds(120));
        
    

Package.appxmanifest

<?xml version="1.0" encoding="utf-8"?>

<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">

  <Identity
    Name="7eb73f1e-b159-4fd0-aab9-4158e57ba08a"
    Publisher="CN=rokeb"
    Version="1.0.0.0" />

  <mp:PhoneIdentity PhoneProductId="7eb73f1e-b159-4fd0-aab9-4158e57ba08a" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>

  <Properties>
    <DisplayName>Shutdown Roulette</DisplayName>
    <PublisherDisplayName>Master Roke Julian Lockhart Beedell</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="Shutdown_Roulette.App">
      <uap:VisualElements
        DisplayName="Shutdown Roulette"
        Square150x150Logo="Assets\Square150x150Logo.png"
        Square44x44Logo="Assets\Square44x44Logo.png"
        Description="Shutdown Roulette"
        BackgroundColor="transparent">
        <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" ShortName="Shutdown Roulette">
        </uap:DefaultTile >
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
    </Application>
  </Applications>

  <Capabilities>
    <iot:Capability Name="systemManagement"/></Capabilities>
</Package>

请注意,我想在 Windows 10 上使用此命令,而不是 Windows 10 IoT;我只是在尝试使用这些命令,因为它们是我能够想到的不依赖 PowerShell、Python 或 Windows 命令处理器的唯一其他调用方式。

【问题讨论】:

【参考方案1】:

根据ShowdownManager的描述,它需要IOT SDK的支持,也就是说它是一个平台受限的API(仅在IOT设备上有效)。

在 Windows 10 桌面设备中,UWP 没有关闭设备的权限。

【讨论】:

以上是关于我的通用 Windows 平台软件是不是能够获得启动关机所需的权限?的主要内容,如果未能解决你的问题,请参考以下文章

K8S 应用启停通用脚本

如何为通用 Windows 平台(UWP)应用程序创建 .appx 包?

通用Windows平台(UWP)中的加密/解密存在数据错误(循环冗余校验)

开源项目|软件包应用作品:通用物联网系统平台

如何在通用 Windows 平台地图控件上设置 LocationRectangle?

通用 Windows 平台上的 Type.GetTypeCode