我用C#和.NET 2.0编写了一个Office共享加载项。它为所有办公应用程序使用相同的COM Shim。目前,每个实例都创建自己的类实例 - 他们不知道加载项是在另一个应用程序上运行的。
是否可以这样做,例如,当Word加载项启动时,它可以检测到Excel加载项已在运行?他们可以互相沟通吗?
假设我的dll名为Addin.dll。例如,当Word打开时,它运行实现IExtensibility接口的Addin.dll中的代码,并创建一个类,我们称之为WordAddin。当Excel打开时,它还会运行Addin.dll中的代码,并创建ExcelAddin的实例。现在,假设Word正在运行且WordAddin存在。打开Excel时,Addin.dll将加载到其他AppDomain中。它不知道WordAddin存在。我希望ExcelAddin知道WordAddin存在,并且能够与它进行通信,可能通过创建两者的父类。
任何人都知道怎么做?
答案 0 :(得分:1)
您可以使用Microsoft消息队列(MSMQ)执行此操作:Use Microsoft Message Queuing in C# for inter-process communication
此代码项目文章介绍了如何检测正在运行的实例以及如何在它们之间复制命令行参数:
Single-Instance C# Application - for .NET 2.0
不是你要问的但可能有趣的是:Detecting a running instance of a program and passing it information
答案 1 :(得分:1)
我最终使用命名管道在进程间进行通信
答案 2 :(得分:0)
让你的插件使用NativeWindow类创建一个“窗口”,并为其提供一个预先确定的唯一名称。然后在addin启动时使用GetWindow和GetWindowText搜索此类窗口的另一个实例。使用SendMessage或PostMessage进行通信。很简单。