Совместное использование надстройки между приложениями Office - PullRequest
1 голос
/ 11 июля 2009

Я написал общую надстройку Office для C # и .NET 2.0. Он использует один и тот же COM Shim для всех офисных приложений. В настоящее время каждый экземпляр создает свой собственный экземпляр моего класса - они не знают, что надстройка запущена в другом приложении.

Можно ли сделать так, чтобы, например, при запуске надстройки Word она могла обнаружить, что надстройка Excel уже запущена? Могут ли они общаться друг с другом?

Допустим, моя dll называется Addin.dll. Когда, например, Word открывается, он запускает код в Addin.dll, который реализует интерфейс IExtensibility, и создает класс, назовем его WordAddin. Когда открывается Excel, он также запускает код в Addin.dll и создает экземпляр ExcelAddin. Теперь предположим, что Word работает, а WordAddin существует. Когда Excel открывается, Addin.dll загружается в другой домен приложений. Он не знает, что WordAddin существует. Я хочу, чтобы ExcelAddin знал, что WordAddin существует, и мог общаться с ним, возможно, через родительский класс, который создает оба.

Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

1 голос
/ 13 июля 2009

В итоге я использовал именованные каналы для связи между процессами

1 голос
/ 11 июля 2009

Вы можете сделать это с помощью Microsoft Message Queue (MSMQ): Использовать Microsoft Message Queuing в C # для межпроцессного взаимодействия

В этой статье проекта кода показано, как обнаружить работающий экземпляр и как скопировать параметры командной строки между ними:

Приложение C # для одного экземпляра - для .NET 2.0

Не совсем то, что вы спрашиваете, но может представлять интерес: Обнаружение запущенного экземпляра программы и передача ему информации

0 голосов
/ 11 июля 2009

Я фактически сделал именно то, о чем вы спрашиваете. Я пошел за старомодными сообщениями окон. Ничего особенного - так оно и будет работать! : -)

Позвольте вашему дополнению создать «окно» с помощью класса NativeWindow и дать ему заранее определенное уникальное имя. Затем найдите другой экземпляр такого окна, используя GetWindow и GetWindowText, когда запускается ваше дополнение. Общайтесь с помощью SendMessage или PostMessage. Легко как это.

...