.NET IE BHO Remoting

时间:2009-11-18 10:06:55

标签: remoting bho .net-remoting

我有一个IE浏览器助手对象,它是IE 8的工具栏插件。 我有另一个.NET .EXE应用程序(远程处理客户端),通过通用接口使用远程连接到这个BHO(远程服务器)。 当我使用Server组件中使用的相同代码测试.EXE应用程序和TEMP控制台应用程序之间的通信时,它可以正常通信,并运行远程方法。

但是,当我尝试与BHO服务器进行通信时,TCP信道上的安全性为ON ChannelServices.RegisterChannel(tcpClientChannel,true); ,我得到一个“FileNotFoundException”无法加载文件或程序集“xxxx”,其中“xxxx”是包含服务器方法的通用接口程序集。

当我尝试与BHO服务器通信时,TCP信道上的安全性为OFF ChannelServices.RegisterChannel(tcpClientChannel,false); ,我收到错误“与远程对象的连接被强制关闭”。

如果我使用简单的测试控制台应用程序重新测试它,它就可以工作。

我开始相信问题在于BHO实例中的远程工作方式...有人在BHO .NET实例中使用Remoting,我使用SPICIE库来使用.NET创建BHO。

Remoting接口对象的COMMON接口程序集 命名空间WWie.CommonClasses {     class WWieRemote:MarshalByRefObject,WWieClassLibrary.WWieCommonClass.IGetHtmlElement     {         公共字符串GetElementClicked()         {             return(“从WWieRemote返回”);         }

    public void SetElementClicked(string str)
    {
        MessageBox.Show("SetElement " + str);
    }

}

}

客户端APP  static TcpChannel tcpClientChannel = new TcpChannel();  public static WWieClassLibrary.WWieCommonClass.IGetHtmlElement remoteObject;  ChannelServices.RegisterChannel(tcpClientChannel,false);  remoteObject =(WWieClassLibrary.WWieCommonClass.IGetHtmlElement)Activator.GetObject(typeof(WWieClassLibrary.WWieCommonClass.IGetHtmlElement),“tcp:// localhost:9002 / TestWWie”);

使用远程方法调用进行测试

    remoteObject.SetElementClicked("from Client");   

服务器BHO  TcpChannel tcpServerChannel = new TcpChannel(9002);  ChannelServices.RegisterChannel(tcpServerChannel,true);  RemotingConfiguration.RegisterWellKnownServiceType(typeof(WWieClassLibrary.WWieCommonClass.IGetHtmlElement),“TestWWie”,WellKnownObjectMode.Singleton);

1 个答案:

答案 0 :(得分:1)

由于IE默认情况下以受保护模式运行,因此它通常无权与更高完整性的进程通信。如果您的URL位于Intranet区域中,则可以推送禁用Intranet区域的保护模式的策略。 否则,您可能希望寻找其他选项,例如共享内存,命名管道,隐藏的工作窗口&已注册消息&为Vista的UIPI等定制消息过滤器