2009-07-11 3 views
1

Ich habe ein freigegebenes Office-Add-In mit C# und .NET 2.0 geschrieben. Es verwendet den gleichen COM Shim für alle Office-Anwendungen. Derzeit erstellt jede Instanz eine eigene Instanz meiner Klasse - sie wissen nicht, dass das Add-In in einer anderen Anwendung ausgeführt wird.Freigeben von Add-Ins zwischen Office-Anwendungen

Ist es möglich, es so zu machen, dass, wenn das Word-Add-In gestartet wird, es feststellen kann, dass das Excel-Add-In bereits ausgeführt wird? Können sie untereinander kommunizieren?

Angenommen, meine DLL heißt Addin.dll. Wenn beispielsweise Word geöffnet wird, wird der Code in Addin.dll ausgeführt, der die IExtensibility-Schnittstelle implementiert und eine Klasse erstellt, nennen wir sie WordAddin. Wenn Excel geöffnet wird, wird auch der Code in Addin.dll ausgeführt, und es wird eine Instanz von ExcelAddin erstellt. Angenommen, Word läuft und WordAddin existiert. Wenn Excel geöffnet wird, wird Addin.dll in einer anderen Anwendungsdomäne geladen. Es ist nicht bekannt, dass WordAddin existiert. Ich möchte, dass ExcelAddin weiß, dass WordAddin existiert, und in der Lage sein, mit ihm zu kommunizieren, vielleicht durch eine Elternklasse, die beides erzeugt.

Wer weiß, wie man das macht?

Antwort

1

Ich landete mit Named Pipes für die Kommunikation zwischen den Prozessen

1

Sie können dies tun, indem eine Microsoft Message Queue (MSMQ): Use Microsoft Message Queuing in C# for inter-process communication

Dieser Code Projekt Artikel zeigt, wie eine laufende Instanz zu erkennen und wie Kommandozeilenparameter zwischen ihnen kopieren:

Single-Instance C# Application - for .NET 2.0

Nicht ganz das, was Sie fragen, aber von Interesse sein könnte: Detecting a running instance of a program and passing it information

+0

Vielen Dank! Angenommen, meine DLL heißt Addin.dll. Wenn beispielsweise Word geöffnet wird, wird der Code in Addin.dll ausgeführt, der die IExtensibility-Schnittstelle implementiert und eine Klasse erstellt, nennen wir sie WordAddin. Wenn Excel geöffnet wird, wird auch der Code in Addin.dll ausgeführt, und es wird eine Instanz von ExcelAddin erstellt. Angenommen, Word läuft und WordAddin existiert. Wenn Excel geöffnet wird, wird Addin.dll in einer anderen Anwendungsdomäne geladen. Es ist nicht bekannt, dass WordAddin existiert. Ich möchte, dass ExcelAddin weiß, dass WordAddin existiert, und in der Lage sein, mit ihm zu kommunizieren, vielleicht durch eine Elternklasse, die beides erzeugt. – emrosenf

+0

Ich schlage vor, Sie fügen zusätzliche Informationen hinzu. zu deiner ursprünglichen Frage .... –

0

Ich habe in der Tat genau das getan, worum du fragst. Ich ging für altmodische Windows-Nachrichten. Nichts Besonderes - so wird es einfach funktionieren! :-)

Lassen Sie Ihr Addin ein "Fenster" mit der NativeWindow-Klasse erstellen und geben Sie ihm einen vordefinierten, eindeutigen Namen. Suchen Sie dann nach einer anderen Instanz eines solchen Fensters mit GetWindow und GetWindowText, wenn Ihr Add-In startet. Kommunizieren Sie mit SendMessage oder PostMessage. Einfach so.

Verwandte Themen