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