2016-10-03 4 views
1

Ich entwickle eine WPF-App und verknüpfte einen Dateityp namens .fcsc. Die Anwendung wird geöffnet, wenn auf die Datei doppelgeklickt wird, sie führt jedoch eine neue Instanz der App aus. Was ich will ist, dass, wenn die App bereits läuft, öffnen Sie die Datei in diesem Fall nicht in einem neuen.Dateiverknüpfung daran hindern, die App erneut zu öffnen

Wie kann ich das archivieren?

Dies ist, was ich habe, wenn eine Datei geöffnet ist:

if (AppDomain.CurrentDomain.SetupInformation != null 
       && AppDomain.CurrentDomain.SetupInformation.ActivationArguments != null 
       && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null && 
       AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Any()) 
      { 
       // is a file association invoke, open the window 
       InstallPluginWindow installPluginWindows = new InstallPluginWindow(AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData); 
       installPluginWindows.Show(); 
       installPluginWindows.Owner = this; 
       this.Opacity = 0.5; 
       this.IsEnabled = false; 
       installPluginWindows.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; 
       installPluginWindows.Closed += installPluginWindows_Closed; 
      } 
      else 
      { 
       NegotiateLogin(); 
      } 

Antwort

1

Der einfache Teil für eine andere Instanz zu prüfen, einen Mutex Einrichtung ist. In Ihrer Anwendung Haupt- oder Startcode waould müssen Sie so etwas wie den Code unten:

bool exclusive; 
    System.Threading.Mutex appMutex = new System.Threading.Mutex(true, "MyAppName", out exclusive); 
    if (!exclusive) 
    { 
     //Another instance running 
    } ... 
    GC.KeepAlive(appMutex); 

Als nächstes müssen Sie die erste Anwendungsinstanz einen Weg, um Nachricht zu implementieren und im Dateinamen übergeben, die doppelt geklickt wurde. Sie können dies auf viele Arten tun, aber das Senden einer benutzerdefinierten Nachricht an das Hauptfenster scheint am einfachsten zu sein. Here ist eine Alternative zur Meldung einer anderen Anwendung.

Verwandte Themen