问题描述
我正在运行Windows服务(C#、. NET Framework 4.7.2),该服务管理UWP应用。
在必需的功能中,我需要知道UWP应用是否正在运行。
要了解正在运行的Windows Store Apps的列表,我使用以下代码: (基于https://blogs.windows.com/windowsdeveloper/2017/06/28/uwp-app-diagnostics/)
private static async Task<List<AppDiagnosticInfo>> GetWindowsStoreApps()
{
var apps = new List<AppDiagnosticInfo>();
var diagnosticAccessStatus = await AppDiagnosticInfo.RequestAccessAsync();
if (diagnosticAccessStatus != DiagnosticAccessStatus.Allowed)
return apps;
var processes = ProcessDiagnosticInfo.GetForProcesses();
foreach (var process in processes)
{
try
{
if (!process.IsPackaged)
continue;
IList<AppDiagnosticInfo> diagnosticInfos = process.GetAppDiagnosticInfos();
if (diagnosticInfos == null || diagnosticInfos.Count < 1)
continue;
apps.Add(diagnosticInfos[0]);
}
catch
{
continue;
}
}
return apps;
}
我会定期使用Timer调用此方法。最终,它会由于以下异常而使服务崩溃(try {} catch {}无济于事)。
引发的异常:...中的“ System.AccessViolationException” ...
中发生了类型为'System.AccessViolationException'的未处理异常在尝试访问IsPackaged属性时会发生这种情况。
为什么崩溃?是否因为它不是在UWP应用程序中运行? 有人知道检索UWP应用列表(名称和进程ID)的任何替代方法吗?
感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)