RDS主机打开Acrobat Reader后,菜单启动子进程获低完整性级别故障排查
问题诊断线索:Acrobat Reader导致菜单启动程序低完整性级别异常
我们的RDS主机上运行一套自定义VB.NET菜单系统,用于启动内部VB.NET/VB6应用,此前运行正常,但近期出现异常:用户打开Acrobat Reader后,通过该菜单启动的所有应用都会获得低完整性级别,导致程序运行失败,仅能通过注销登录解决。
用于启动应用的代码如下:
Dim PSI As New ProcessStartInfo With PSI .Arguments = Arguments .WorkingDirectory = WorkingDirectory .FileName = Executable .UseShellExecute = True End With Dim P As Process = Process.Start(PSI) ' Executable: "C:\Program Files\<path>\<appname>.EXE" ' Arguments: "/NET=BHDMGR /USERLEVEL=3 /SYSLOG=False" ' WorkingDirectory: "C:\Program Files\<path>"
以下是具体调试线索:
验证Acrobat保护模式的影响:Acrobat默认开启的「保护模式」会以低完整性级别运行,可能污染Shell启动上下文。尝试关闭Acrobat的保护模式(设置→安全性增强→取消勾选「启用保护模式」),重启Acrobat后测试问题是否消失。
检查Shell启动与直接启动的差异:
- 打开Acrobat后,直接在资源管理器中双击启动目标应用,查看其完整性级别是否正常。若资源管理器启动也异常,说明Shell被Acrobat的低完整性进程影响;若仅菜单启动异常,需检查菜单程序自身的进程状态。
- 修改菜单代码,将
UseShellExecute设为False,直接创建进程而非通过Shell启动,测试是否还会出现低完整性问题。
强制指定启动程序的完整性级别:
- 为菜单程序添加应用程序清单(App.manifest),明确指定
requestedExecutionLevel为asInvoker(中完整性级别),确保菜单程序自身运行在正常级别:<requestedExecutionLevel level="asInvoker" uiAccess="false" /> - 若
UseShellExecute=False,可通过P/Invoke调用Windows API,显式设置新进程的完整性级别为中级别(需调用CreateProcess并指定令牌)。
- 为菜单程序添加应用程序清单(App.manifest),明确指定
检查Acrobat的Shell扩展与进程注入:
- 使用Autoruns工具查看系统中Acrobat相关的Shell扩展(右键菜单、预览窗格等),禁用后测试问题是否缓解。
- 打开Acrobat前后,用Process Explorer查看菜单程序的完整性级别及加载的DLL,确认是否被Acrobat注入了低完整性的模块,导致进程令牌被修改。
监控进程令牌的变化:
- 使用Process Monitor跟踪菜单程序启动目标应用的过程,查看是否有Acrobat相关进程修改了菜单程序的环境变量或进程令牌,导致子进程继承低完整性。
内容的提问来源于stack exchange,提问作者Bmaster007
相关产品推荐
相关产品推荐

