1

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

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

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

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

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

远程接口对象命名空间 WWie.CommonClasses { class WWieRemote : MarshalByRefObject, WWieClassLibrary.WWieCommonClass.IGetHtmlElement { public string GetElementClicked() { return ("Returned from WWieRemote"); }

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

}

}

CLIENT APP 静态 TcpChannel tcpClientChannel = new TcpChannel(); 公共静态 WWieClassLibrary.WWieCommonClass.IGetHtmlElement 远程对象;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);

4

1 回答 1

1

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

于 2009-11-18T17:36:50.587 回答