哪个是在shell扩展和应用程序之间进行通信的首选方式,这两种方式都是用C#编写的

时间:2013-04-17 09:18:54

标签: c# .net com shell-extensions

我在C#中编写了一个shell扩展,它显示了我自己的上下文菜单项(FileExtensionMenu) 单击我的菜单条目后,shell扩展应该将选择的文件名提交给我可以使用此文件处理的主应用程序。

我的问题是扩展和应用程序之间的通信方式。 或者我必须将程序逻辑转移到shell扩展代码吗?

提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

您可以使用Windows Communication Foundation (WCF)调用正在运行的应用程序中的方法。设置它有点繁琐,但是一旦你拥有它就可以很容易地通过RPC调用方法。

请注意,这些方法是从单独的线程调用的,因此您需要在必要时将其封送到UI调用(对于Windows窗体使用Control.Invoke()Control.BeginInvoke())。

See here for full details

此外,see here for a simple example。正如Adam在下面所说,你需要使用命名管道作为传输机制,因此在查看该示例时请记住,而不是

new NetTcpBinding(),
"net.tcp://localhost:8000");

你会有类似的东西:

new NetNamedPipeBinding(),
"net.pipe://localhost/YourServiceNameGoesHere"