Öffnen eines "bekannten Dateityps" in die laufende Instanz der benutzerdefinierten App - .NET

7

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 ..

    
mikeymo 08.01.2009, 14:16
quelle

5 Antworten

14

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.

    
casperOne 08.01.2009, 14:33
quelle
3

Sieht so aus, als ob Sie eine einzelne Instanzanwendung erstellen möchten. Dies kann in C # mithilfe von WindowsFormsApplicationBase in Microsoft.VisualBasic.dll

erfolgen

Für Details, werfen Sie einen Blick auf: Ссылка oder suche nach WindowsFormsApplicationBase

    
foson 08.01.2009 14:34
quelle
2

So würde ich es machen:

  1. Überprüfen Sie als Erstes in der Hauptmethode die Prozessliste für eine vorhandene Instanz der Anwendung.
  2. Falls gefunden, senden Sie den Dateinamen / Pfad an die bereits laufende Instanz mit Ihrer bevorzugten Interprozess-Kommunikationsmethode ( Senden von Windows-Nachrichten , Remoting, WCF, etc.
  3. Schließen Sie den neuen Prozess, den Windows zu starten versucht hat (da die vorhandene Instanz bereits die Datei open Operation
  4. verarbeitet hat)
Joel Martinez 08.01.2009 14:21
quelle
0

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.

    
Rinat Abdullin 08.01.2009 16:16
quelle
0

Beispiel mit TCP-Sockets: Ссылка

  1. Starten Sie TCPListener im Formular
  2. Verbinden Sie TCPClient im Hauptverzeichnis der zweiten Instanz
  3. Sende ActivationArguments über die TCP-Verbindung an das Formular

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:

  1. Der Konstruktor der MainForm (Hoofdscherm), wo der Server gestartet wird und die Portnummer in eine Datei geschrieben wird. Die erste Datei wird ebenfalls geöffnet.
  2. Die Main-Funktion (Program.cs), in der die zweite, dritte, ... Instanz in erster Instanz mit dem TcpListener verbunden wird und den Dateinamen über den Socket sendet

Der Quellcode ist auf der Schaltfläche "Broncode" verfügbar.

    
user3582780 04.05.2016 22:54
quelle

Tags und Links