使用进程监视器对应用程序无法启动进行故障排除
本文介绍如何安装进程监视器工具来排查新式、收件箱和Microsoft应用商店应用无法启动的问题。
下载进程监视器工具。 在本地下载进程监视器工具后,提取文件。
捕获事件
若要捕获进程监视器跟踪,请使用提升的权限运行它(以管理员身份运行)。
注意
请确保运行与平台匹配的进程监视器版本(x86 系统的Procmon.exe 、 X64 系统的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 手动添加筛选器。
退出“进程树”视图,或在“进程监视器筛选器”窗口中选择“确定”以查看包含进程的筛选捕获行。 在此示例中, Calculator.exe 进程正在启动。
然后转到进程捕获的末尾,并在进程退出事件之前查找一组线程退出事件。
还可以查看用于WerFault.exe的 Process Create 事件。 此时,应用程序已达到不可恢复的条件,并已调用默认错误处理程序。
还应注意,还会记录与应用程序崩溃相关的某些事件日志。
可以从此行开始查看是否可以发现任何访问被拒绝的结果事件。
在这种情况下,应根据工作计算机中的注册表项检查以下注册表项的权限,以查看是否存在一些差异。
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
在此示例中,所有应用程序包都缺少 User Shell 文件夹中的“读取”权限。
也可以使用 PowerShell 或命令提示符完成此操作。
对于工作系统:
对于非工作系统:
如果未发现任何可能可疑的附近权限问题,则始终可以检查所有可疑权限块的整个跟踪。 首先,通过选择“筛选器”菜单下的“重置筛选器”来删除计算器进程的筛选器。 然后,从“工具”菜单中选择“计数发生次数”选项。 可以从下拉菜单中选择结果 结果 ,然后选择“ 计数”。
筛选完成后,可以双击“拒绝访问”行以查看筛选的事件:
如果浏览列表,并非所有“拒绝访问”结果都会导致代码失败。
通常,要求“所有访问”的任何内容都经常被拒绝,因此你可以将其排除在调查之外。 可以通过筛选包含 Desired Access 的事件:所有访问 来自动执行此操作,如下所示:
在此示例中,结果如下所示:
为“所有应用程序包”添加适当的权限可同时解决这两个应用程序的问题。
有时无法确定哪些权限更改正在停止应用程序启动。 进程监视器仅捕获进程活动的某些部分。
如果许多计算机受到同一问题的影响,请从新安装的新计算机开始,慢慢添加策略,直到应用程序无法再次启动,从而解决故障排除问题。
如果只有一台计算机受到影响,请恢复或重置计算机。 如果只有一个用户受到影响,请重新创建用户的配置文件。