Wie würden Sie eine Datei (mit einer bekannten Datei- / Anwendungszuordnung in der Registrierung) in eine "laufende Instanz" der Anwendung öffnen, in der sie geöffnet werden soll? Ein Beispiel wäre, ich habe Excel geöffnet und klicke auf eine XLS-Datei ..... die Datei öffnet sich in der aktuellen Excel-Instanz. Ich möchte dies für eine benutzerdefinierte Anwendung tun ... Wie funktioniert das Eventing / Messaging, das der aktuellen Instanz "mitteilt", dass sie eine Datei öffnen muss? Gibt es einen "Dateiwächter", der nach einer Anfrage sucht? Danke ..
Sie möchten eine Klasse von WindowsFormsApplicationBase erben Setzen der geschützten Eigenschaft IsSingleInstance auf true:
%Vor%Die Hauptmethode Ihrer App sieht dann so aus:
%Vor%Beachten Sie den mit & lt; 1 & gt; markierten Abschnitt. Sie haben dies mit einem Event-Handler für das StartupNextInstanceEvent eingerichtet. Dieses Ereignis wird ausgelöst, wenn die nächste Instanz Ihrer App ausgelöst wird, wenn Sie eine einzelne Instanzanwendung haben (die Sie im Konstruktor von MyWindowsApplicationBase angegeben haben). Der Event-Handler übergibt eine von EventArgs abgeleitete Klasse mit den Befehlszeilenargumenten, die Sie dann in der laufenden Instanz Ihrer App verarbeiten können.
Dann müssen Sie lediglich die Dateizuordnungen normal für die Dateitypen festlegen, die Ihre App verarbeiten soll, und Sie sind eingestellt.
So würde ich es machen:
Windows verwendet zu diesem Zweck DDE .
Dynamic Data Exchange (DDE) ist eine Technologie für die Kommunikation zwischen mehreren Anwendungen unter Microsoft Windows oder OS / 2.
Registry-Zuordnungen für Word- oder Office-Dateien haben normalerweise zusätzlich zur üblichen Dateizuordnung DDE-Befehle (die ausgeführt werden sollen, wenn die App bereits läuft).
Sie können also einen DDE-Server in Ihrer C # -App hosten, um diese Funktionalität zu implementieren.
Beispiel mit TCP-Sockets: Ссылка
Funktioniert auch für mehrere Dateien gleichzeitig und sogar für mehrere Dateien zum ersten Mal (wenn die Anwendung noch nicht gestartet wurde)
Die wichtigsten Codebausteine sind:
Der Quellcode ist auf der Schaltfläche "Broncode" verfügbar.