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 调用而被阻止:死锁。
解决此问题的两种方法:
一旦授予权限,该权限将一直存在,直到用户收回它。您可以通过 AppDiagnosticInfo 异步请求它,既可以像调用 RequestInfoAsync 那样间接请求,也可以通过调用 AppDiagnosticInfo.RequestAccessAsync
显式请求
从 UI 线程调用 GetForProcesses:
await Task.Run(() =>
{
List<ProcessDiagnosticInfo> processList = ProcessDiagnosticInfo.GetForProcesses().ToList();
processList.ForEach(o => Debug.WriteLine(o.ExecutableFileName));
});
死锁被记录为一个错误,将在 Windows 10 的未来版本中解决 OS 级别。您可以在 Insider Previews 中观看它。
我的应用程序需要获得 运行 进程列表的权限。当我第一次单击按钮获取进程列表时,应显示一个对话框以请求许可。但是我无法单击是或否按钮,因此无法授予我的应用程序权限。我的应用程序冻结。
应用清单:
<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 调用而被阻止:死锁。
解决此问题的两种方法:
一旦授予权限,该权限将一直存在,直到用户收回它。您可以通过 AppDiagnosticInfo 异步请求它,既可以像调用 RequestInfoAsync 那样间接请求,也可以通过调用
AppDiagnosticInfo.RequestAccessAsync
显式请求
从 UI 线程调用 GetForProcesses:
await Task.Run(() => { List<ProcessDiagnosticInfo> processList = ProcessDiagnosticInfo.GetForProcesses().ToList(); processList.ForEach(o => Debug.WriteLine(o.ExecutableFileName)); });
死锁被记录为一个错误,将在 Windows 10 的未来版本中解决 OS 级别。您可以在 Insider Previews 中观看它。