Führen Sie ein Beispiel aus der Anwendung
Habe ich eine windows-Anwendung (C#) und ich brauche, um Sie zu konfigurieren, um eine Instanz der Anwendung mit der Zeit , Es bedeutet, dass ein Benutzer auf die .exe-Datei und die Anwendung wird ausgeführt und der Benutzer nicht in der Nähe der ersten Instanz der Anwendung ausgeführt wird und die Notwendigkeit zum ausführen einer nächsten Instanz, so sollte er die erste Instanz und öffnen nicht neue.
kann einer mir helfen wie das geht?
vielen Dank im Voraus
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich oft dieses Problem lösen, indem Sie für andere Prozesse mit dem gleichen Namen. Der Vorteil/Nachteil mit diesem ist, dass Sie (oder der Benutzer) können Sie "Schritt zur Seite" von der Prüfung durch das umbenennen der exe-Datei. Wenn Sie nicht möchten, dass Sie könnte wahrscheinlich verwenden Sie die Prozess-Objekt, das zurückgegeben wird.
Kommt es auf Ihren Bedarf, denke ich, dass es praktisch zu umgehen, die Prüfung ohne neu zu kompilieren (es ist ein server-Prozess, die manchmal als Dienst ausgeführt werden).
Den VB.Net -team hat bereits ein Lösung. Sie benötigen, um eine Abhängigkeit Microsoft.VisualBasic.dll aber wenn das nicht stört, dann ist dies eine gute Lösung IMHO.
Siehe am Ende des folgenden Artikels: Single-Instance-Apps
Hier die relevanten Auszüge aus dem Artikel:
1) Fügen Sie einen Verweis auf Microsoft.VisualBasic.dll
2) Fügen Sie die folgende Klasse, um Ihr Projekt.
Öffnen Sie Das Programm.cs und fügen Sie die folgende Anweisung verwenden:
Ändern Sie die Klasse um die folgenden:
Edit : Nachdem die Frage wurde geändert, damit Sie auch c#. Meine Antwort funktioniert nur für vb.net Anwendung
wählen Sie die Machen single instance application Kontrollkästchen, um zu verhindern, dass Benutzer das ausführen mehrerer Instanzen der Anwendung. Die Standardeinstellung ist dieses Kontrollkästchen deaktiviert, so dass mehrere Instanzen der Anwendung ausgeführt werden.
Können Sie von Projekt -> Eigenschaften -> Registerkarte Anwendung
Quelle
Hatten wir genau das gleiche problem. Wir haben versucht, den Prozess-Ansatz, aber das schlägt fehl, wenn der Benutzer hat keine Rechte zum Lesen von Informationen über andere Prozesse, d.h. nicht-admins. So implementierten wir die Lösung weiter unten.
Grundsätzlich versuchen wir, eine Datei zu öffnen, die für exklusive Lesung. Wenn dies fehlschlägt (weil anohter Beispiel hat dies bereits getan), so erhalten wir eine Ausnahme und können die app beenden.
Vorausgesetzt, Sie sind mit C#
Ich würde verwenden eine
Mutex
für dieses Szenario. AlternativSemaphore
auch funktionieren würde (aber einMutex
scheint mehr geeignet).Hier mein Beispiel (aus einer WPF-Anwendung, aber die gleichen Grundsätze sollten auch für andere Projekttypen):
Fand ich diese code, es ist Arbeit!