当IE处于非管理员模式时,无法与通过stdin / stdout从BHO启动的可执行文件通信

时间:2016-06-09 08:56:29

标签: c# internet-explorer process bho redirectstandardoutput

我正在编写IE 11扩展(BHO),它应该能够启动可执行文件,通过标准的开/关流与它进行通信,并相应地将结果传播到页面。

在管理模式下运行IE时,所有都是桃子。 当IE以常规用户模式启动时,BHO仍然能够调用可执行文件,但与它的通信中断:来往/来自可执行文件的流不会被重定向(可执行输出开始出现在它自己的控制台中,不再到达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扩展,因此欢迎提供建议。

谢谢!

1 个答案:

答案 0 :(得分:0)

在这里回答我自己的问题。

看起来问题与IE和可执行文件的完整性级别有关。 根据{{​​3}},这些级别是:

  • 系统:由OS组件使用,不应由应用程序使用。
  • 高:以完全管理员权限提升的流程。
  • 中:以正常方式启动流程。
  • 低:由IE和Windows Mail用于提供保护模式

IE在低于可执行文件的完整性级别上运行,因此禁止与之通信。 this resource列出了替代的沟通方式。

快速解决方案是降低可执行文件的默认完整性级别(对我有用,但对可执行文件设置了限制(例如访问文件系统等)):

icacls lowIODummy.exe /setintegritylevel Low