我在 C# 中编写了一个 shell 扩展,它显示了我自己的上下文菜单项 (FileExtensionMenu) 单击我的菜单项后,shell 扩展应该将选择的文件名提交给我可以使用此文件处理的主应用程序。
我的问题是扩展程序和应用程序之间的通信方式是哪种。或者我必须将程序逻辑转移到外壳扩展代码吗?
在此先感谢您的帮助
我在 C# 中编写了一个 shell 扩展,它显示了我自己的上下文菜单项 (FileExtensionMenu) 单击我的菜单项后,shell 扩展应该将选择的文件名提交给我可以使用此文件处理的主应用程序。
我的问题是扩展程序和应用程序之间的通信方式是哪种。或者我必须将程序逻辑转移到外壳扩展代码吗?
在此先感谢您的帮助
您可以使用Windows Communication Foundation (WCF)
来调用正在运行的应用程序中的方法。设置起来有些繁琐,但是一旦有了它,就可以很容易地通过 RPC 调用方法。
请注意,这些方法是从单独的线程中调用的,因此您需要在必要时将其编组到 UI 调用(使用Control.Invoke()
或Control.BeginInvoke()
用于 Windows 窗体)。
另外,请参见此处的简单示例。正如亚当在下面所说,您将需要使用命名管道作为传输机制,因此在查看该示例时请记住,而不是
new NetTcpBinding(),
"net.tcp://localhost:8000");
你会有类似的东西:
new NetNamedPipeBinding(),
"net.pipe://localhost/YourServiceNameGoesHere"