当 IE 处于非管理模式时,无法通过标准输入/标准输出与从 BHO 启动的可执行文件通信
Unable to communicate with an executable started from BHO via stdin / stdout when IE is in non admin mode
我正在编写一个 IE 11 扩展 (BHO),它应该能够启动一个可执行文件,通过标准 on/out 流与其通信并将结果相应地传播到页面。
当 运行 IE 处于管理模式时,一切都是桃子。 当 IE 以常规用户模式启动时,BHO 仍然能够调用可执行文件,但与其通信中断:streams to/from 可执行文件未被重定向(可执行文件输出开始出现在它自己的控制台中,不再到达 BHO)。
我这样开始我的过程:
nativeAppProcess = new Process();
nativeAppProcess.StartInfo.FileName = NATIVE_APP_PATH;
nativeAppProcess.StartInfo.UseShellExecute = false;
nativeAppProcess.StartInfo.RedirectStandardOutput = true;
nativeAppProcess.StartInfo.RedirectStandardInput = true;
nativeAppProcess.Start();
我可以完全控制本机应用程序和 IE 扩展,因此欢迎对两者提出建议。
谢谢!
在这里回答我自己的问题。
看起来问题与 IE 和可执行文件的完整性级别有关。 根据 this resource,这些级别是:
- 系统:由 OS 组件使用,不应由应用程序使用。
- 高:运行 提升为完全管理员权限的进程。
- 中等:进程以正常方式启动。
- 低:被 IE 和 Windows Mail 使用以提供保护模式
IE 在比可执行文件更低的完整性级别上运行,因此被禁止与其通信。 This page 列出了可供选择的通信方式。
一个快速的解决方案是降低可执行文件的默认完整性级别(对我有用,但对可执行文件施加限制(例如访问文件系统等)):
icacls lowIODummy.exe /setintegritylevel Low