使用进程监视器对应用程序无法启动进行故障排除

本文介绍如何安装进程监视器工具来排查新式、收件箱和Microsoft应用商店应用无法启动的问题。

下载进程监视器工具。 在本地下载进程监视器工具后,提取文件。

捕获事件

若要捕获进程监视器跟踪,请使用提升的权限运行它(以管理员身份运行)。

注意

请确保运行与平台匹配的进程监视器版本(x86 系统的Procmon.exeX64 系统的Procmon64.exe ,以及 ARM 的Procmon64a.exe )。

启动后,将以前保存的任何筛选器重置为默认值,以确保以前设置的筛选器不会筛选出任何潜在的事件。 如果是第一次运行进程监视器,或者没有设置筛选器,则可以在没有弹出窗口的情况下开始录制。

“进程监视器筛选器”窗口的屏幕截图,其中显示了“重置”按钮。

默认情况下,录制应自动启动。 但是,可以通过选择以下图标来确保它正在运行:

“进程监视器”窗口的屏幕截图,其中选择了一个图标来检查该工具是否正在运行。

或者,可以通过按 Ctrl E 或从“文件”菜单中选择“捕获事件 + 来启动录制。 可以看到状态栏中记录的事件,如下所示:

状态栏中显示的录制事件的屏幕截图。

或者,如果图形用户界面(GUI)不是选项,或者系统只能通过控制台访问来远程访问,则可以使用 Windows PowerShell 或命令提示符跟踪问题。 例如:

C:\ProcessMonitor>procmon64.exe -accepteula -backingfile C:\ProcessMonitor\Recording.pml -quiet -minimized

其他选项可用,包括筛选和设置最大文件大小。 有关详细信息,请参阅 进程监视器

进程监视器使用情况的命令行参数的屏幕截图。

若要终止并保存跟踪,可以使用以下命令:

C:\ProcessMonitor>procmon64.exe -terminate -quiet

此外,还可以使用 PowerShell 或 PsExec 工具远程运行进程监视器。 例如:

C:\PSTools>psexec.exe -sd \\<Computer Name> C:\ProcessMonitor\procmon64.exe -accepteula -backingfile C:\ProcessMonitor\Recording.pml -quiet -minimized

若要停止录制,可以使用以下命令:

C:\PSTools>psexec.exe -sd \\<Computer Name> C:\ProcessMonitor\procmon64.exe -terminate -quiet

存储和保存事件

有多种方法可用于存储和保存事件。 可以从“文件”菜单中选择“支持文件”。 然后,可以看到两种方法来存储事件:

  • 使用虚拟内存
  • 使用命名的文件

“进程监视器支持文件”窗口的屏幕截图,其中包含两种存储事件的方法。

使用虚拟内存

此方法使用系统的内存来存储文件,直到用户手动保存该文件。

注意

运行进程监视器的时间过长(由虚拟内存提供支持)可能会导致进程监视器使用所有可用的系统虚拟内存,这可能导致系统停止响应。

状态栏中显示的虚拟内存支持的事件的屏幕截图。

如果以虚拟内存的形式开始录制,则需要在退出进程监视器之前保存录制。

保存图标和“保存到文件”窗口的屏幕截图,其中已选中“所有事件”和“本机进程监视器格式”。

请确保选择“所有事件”,并将格式设置为本机进程监视器格式(PML)。 如果录制不包含所有事件,则只会显示或突出显示可用于分析的事件,这可能不足。

由文件提供支持

此方法使用文件来存储录制内容,不需要在退出进程监视器之前手动保存文件。

注意

如果未定义最大文件大小,则运行进程监视器的时间过长(由文件提供支持),可能会导致进程监视器占用所有可用的系统磁盘空间,这可能导致系统停止响应。

状态栏中显示的文件支持的事件的屏幕截图。

设置进程监视器并启动录制后,需要重现问题。

故障排除示例

以此问题为例;你具有不起作用的计算器应用程序。 首先,使用上述任何方法启动进程监视器录制。 然后,尝试启动应用程序来重现问题。 问题重现后,停止进程监视器录制并保存数据。

若要分析记录的进程监视器跟踪,请使用进程监视器将其打开。 在菜单上的工具选择“进程树以查看应用程序是否在录制过程中启动。

选择计算器过程:

“进程树”窗口的屏幕截图,其中选择了计算器进程。

若要专注于进程,请右键单击应用程序名称,然后选择“ 添加进程以包括筛选器”。

右键单击计算器进程的屏幕截图,其中显示了要包括筛选器的添加进程。

同样,可以为进程 ID 手动添加筛选器。

“进程监视器筛选器”窗口的屏幕截图,其中定义了进程 ID。

退出“进程树”视图,或在“进程监视器筛选器”窗口中选择“确定以查看包含进程的筛选捕获行。 在此示例中, Calculator.exe 进程正在启动。

“进程监视器”窗口的屏幕截图,其中选择了计算器进程。

然后转到进程捕获的末尾,并在进程退出事件之前查找一组线程退出事件。

“进程监视器”窗口的屏幕截图,其中选择了“计算器进程”和上面的“线程退出”事件。

还可以查看用于WerFault.exe的 Process Create 事件。 此时,应用程序已达到不可恢复的条件,并已调用默认错误处理程序。

还应注意,还会记录与应用程序崩溃相关的某些事件日志。

显示应用程序错误事件的事件查看器窗口的屏幕截图。

显示事件 5961 的事件查看器窗口的屏幕截图。

可以从此行开始查看是否可以发现任何访问被拒绝的结果事件。

“进程监视器”窗口的屏幕截图,其中选择了访问被拒绝的计算器进程。

在这种情况下,应根据工作计算机中的注册表项检查以下注册表项的权限,以查看是否存在一些差异。

\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

在此示例中,所有应用程序包都缺少 User Shell 文件夹中的“读取”权限

用户 Shell 文件夹权限的屏幕截图,其中选择了所有应用程序包。

也可以使用 PowerShell 或命令提示符完成此操作。

对于工作系统:

工作系统的 User Shell 文件夹权限的 PowerShell cmdlet 的屏幕截图。

对于非工作系统:

非工作系统的 User Shell 文件夹权限的 PowerShell cmdlet 的屏幕截图。

如果未发现任何可能可疑的附近权限问题,则始终可以检查所有可疑权限块的整个跟踪。 首先,通过选择“筛选器”菜单下的“重置筛选器”来删除计算器进程的筛选器。 然后,从“工具”菜单中选择“计数发生次数”选项。 可以从下拉菜单中选择结果 结果 ,然后选择“ 计数”。

筛选完成后,可以双击“拒绝访问”行以查看筛选的事件:

“计数值出现次数”窗口的屏幕截图,其中选择了“拒绝访问”行。

计算器进程的屏幕截图,后跟一些访问被拒绝的进程。

如果浏览列表,并非所有“拒绝访问”结果都会导致代码失败。

通常,要求“所有访问”的任何内容都经常被拒绝,因此你可以将其排除在调查之外。 可以通过筛选包含 Desired Access 的事件:所有访问 来自动执行此操作,如下所示:

“进程监视器筛选器”窗口的屏幕截图,其中显示了 Desired Access All Access 筛选器。

在此示例中,结果如下所示:

“进程监视器”窗口的屏幕截图,其中选择了 StartMenuExperienceHost 和计算器进程。

“进程监视器”窗口的屏幕截图,其中选择了 StartMenuExperienceHost 进程。

为“所有应用程序包”添加适当的权限可同时解决这两个应用程序的问题。

有时无法确定哪些权限更改正在停止应用程序启动。 进程监视器仅捕获进程活动的某些部分。

如果许多计算机受到同一问题的影响,请从新安装的新计算机开始,慢慢添加策略,直到应用程序无法再次启动,从而解决故障排除问题。

如果只有一台计算机受到影响,请恢复或重置计算机。 如果只有一个用户受到影响,请重新创建用户的配置文件。