2009-08-26 6 views
3

Ich muss die eingeloggte Zeit eines Benutzers erkennen, der über Remote Desktop oder Konsole in C# mit dem Server verbunden ist. Ich habe versucht, eine Eigenschaft in den WMI-Klassen zu suchen, aber ich habe keine gefunden. Danke nochmals im Voraus!Wie erkennen Sie, wenn ein Benutzer mit .NET (C#) im System angemeldet ist?

+0

hast du ldap versucht? – Cleiton

+0

Mit Remotedesktop können Sie eine Sitzung trennen und später erneut verbinden, während die Benutzersitzung auf dem Server angemeldet bleibt. Welchen Wert möchten Sie in dieser Situation zurückgeben - Zeit seit der ersten Benutzeranmeldung oder Länge der letzten RDP-Sitzung? – SqlRyan

+0

Es ist in Ordnung für mich, die Zeit seit der ersten Benutzeranmeldung abzurufen. – backslash17

Antwort

2

Überprüfen Sie cassia, die .NET-Terminaldienste-Bibliothek.

ITerminalServicesManager manager = new TerminalServicesManager(); 
using (ITerminalServer server = manager.GetRemoteServer("your-server-name")) 
{ 
    server.Open(); 
    foreach (ITerminalServicesSession session in server.GetSessions()) 
    { 
     Console.WriteLine("Session ID: " + session.SessionId); 
     Console.WriteLine("User: " + session.UserAccount); 
     Console.WriteLine("State: " + session.ConnectionState); 
     Console.WriteLine("Logon Time: " + session.LoginTime); 
    } 
} 

Sie könnten auch P/Invoke verwenden, um die Windows Terminal Services API direkt zugreifen, aber Cassia wickelt es für Sie.

+0

Und wenn der Benutzer von der Konsole aus verbunden ist? Es funktioniert auch? – backslash17

+0

Ich glaube schon, es sollte eine SessionID von 0 haben und der WindowStationName sollte "Console" sein. –

Verwandte Themen