Wie kann ich nach einem laufenden Prozess pro Benutzersitzung suchen?

8

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%     
Russ 22.04.2009, 15:11
quelle

4 Antworten

6

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

    
tanascius 22.04.2009, 15:14
quelle
3

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

    
robertpnl 22.04.2009 15:32
quelle
0

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.

    
Christophe Keller 16.12.2009 11:11
quelle
0

Ich sage nur das Offensichtliche - obwohl Mutex in der Regel als bessere Lösung angesehen wird, können Sie das Problem der Einzelinstanz pro Sitzung auch ohne Mutex lösen - testen Sie einfach auch SessionId .

%Vor%

Quelle (kein Linq)

    
itsho 24.03.2016 21:55
quelle

Tags und Links