当 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