Ich habe eine .NET-Anwendung, die es mir nur erlaubt, jeweils einen einzelnen Prozess auszuführen, diese Anwendung wird jedoch von Zeit zu Zeit in Citrix-Boxen verwendet und kann daher von mehreren Benutzern auf demselben Computer ausgeführt werden .
Ich möchte prüfen und sicherstellen, dass die Anwendung nur einmal pro Benutzersitzung ausgeführt wird, da Benutzer A die Anwendung "App bereits verwendet" erhält, wenn Benutzer A die Anwendung gerade ausführt, und dies nicht tun sollte.
Dies ist, was ich jetzt habe, das auf den laufenden Prozess prüft:
%Vor%BEARBEITEN: Verbesserte die Antwort gemäß diese Cw-Frage ...
Sie können einen Mutex verwenden, um zu überprüfen, ob die App bereits läuft:
%Vor% Wichtig ist das AppGuid
- Sie könnten es vom Benutzer abhängig machen.
Vielleicht möchten Sie diesen Artikel lesen: der missverstandene Mutex
Wie tanascius bereits sagt, können Sie den Mutex verwenden.
Auf einem Server, auf dem Terminaldienste ausgeführt werden, kann ein benannter Systemmutex zwei Sichtbarkeitsebenen aufweisen. Wenn der Name mit dem Präfix "Global \" beginnt, ist der Mutex in allen Terminalserver-Sitzungen sichtbar. Wenn der Name mit dem Präfix "Local \" beginnt, ist der Mutex nur in der Terminalserversitzung sichtbar, in der er erstellt wurde.
Quelle: msdn, Mutex-Klasse
Wenn Form1 Non-Hintergrund-Threads startet und Form1 beendet, haben Sie ein Problem: Der Mutex ist freigegeben, aber der Prozess ist immer noch da. Etwas in den folgenden Zeilen ist besser IMHO:
%Vor%Der Mutex wird nicht freigegeben, solange die primäre Anwendungsdomäne noch aktiv ist. Und das wird so lange dauern, wie die Anwendung läuft.