UWP_ 无法在 "access diagnostics information" 对话框上单击 "yes" 或 "no" 以授予应用权限

UWP_ Cannot click "yes" or "no" on "access diagnostics information" dialog to grant permission for app

我的应用程序需要获得 运行 进程列表的权限。当我第一次单击按钮获取进程列表时,应显示一个对话框以请求许可。但是我无法单击是或否按钮,因此无法授予我的应用程序权限。我的应用程序冻结。
下面是我的代码:
应用清单:

<Package>   xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
    <Capabilities>
        <Capability Name="internetClient" />
        <rescap:Capability Name="appDiagnostics"/>
      </Capabilities>
</Package>

主类:

   private void LoadProcesses()
    {
                    List<ProcessDiagnosticInfo> processList = ProcessDiagnosticInfo.GetForProcesses().ToList();
                    processList.ForEach(o =>  Debug.WriteLine(o.ExecutableFileName));
    }

private  void StartButton_Click(object sender, RoutedEventArgs e)
{
   LoadProcesses();
}     

我是不是漏掉了什么?

更新
我试过了

   IList<AppDiagnosticInfo> listAppInfo = await AppDiagnosticInfo.RequestInfoAsync();

它工作正常,我可以授予我的应用程序权限。所以先获取应用程序信息然后获取进程信息,该应用程序可以运行。但是,当我只想获取进程信息时,它没有意义。你怎么看,留下你的评论。谢谢

问题是您在 UI 线程上同步调用 ProcessDiagnosticInfo.GetForProcesses()。这会阻止等待权限对话框,该对话框会因等待您的 GetForProcesses 调用而被阻止:死锁。

解决此问题的两种方法:

  1. 一旦授予权限,该权限将一直存在,直到用户收回它。您可以通过 AppDiagnosticInfo 异步请求它,既可以像调用 RequestInfoAsync 那样间接请求,也可以通过调用 AppDiagnosticInfo.RequestAccessAsync

  2. 显式请求
  3. 从 UI 线程调用 GetForProcesses:

    await Task.Run(() =>
    {
        List<ProcessDiagnosticInfo> processList = ProcessDiagnosticInfo.GetForProcesses().ToList();
        processList.ForEach(o => Debug.WriteLine(o.ExecutableFileName));
    });
    

死锁被记录为一个错误,将在 Windows 10 的未来版本中解决 OS 级别。您可以在 Insider Previews 中观看它。