Laden...

Remote Benutzer gezielt auf dem Terminalserver über C# abmelden!

Erstellt von csharp-user vor 11 Jahren Letzter Beitrag vor 11 Jahren 7.731 Views
C
csharp-user Themenstarter:in
63 Beiträge seit 2011
vor 11 Jahren
Remote Benutzer gezielt auf dem Terminalserver über C# abmelden!

Hallo zusammen,

wie kann man einen bestimmten User auf dem Remote Server(Windows 2003 oder 2008) abmelden? Ich möchte nicht, dass nur sein RDP-Fenster geschlossen wird, sondern eine richtige Abmeldung, damit seine Einstellungen, wie z.B. das Desktop Verzeichnis und etc. gespeichert werden! Es geht hier darum, dass ein neuer User über ein Tool einmalig automatisiert an Terminalserver angemeldet wird, damit das Betriebssystem (Windows) das Verzeichnis "Desktop" und andere Dateien automatisch erzeugt. Für die RDP Verbindung verwende ich "AxMSTSCLib", damit der neue Benutzer automatisch über das Tool eingeloggt wird. Soweit so gut. Es gibt eine Methode "Disconnect()". Diese Methode schließt nur das RDP Fenster und nicht mehr! Das Betriebssystem erzeugt das Verzeichnis "Desktop" nur dann, wenn der Benutzer sich richtig abmeldet. Es gibt leider bei "AxMSTSCLib" keine logout Methode oder ähnliches. Deshalb suche ich eine andere C# Methode, damit ich einen Benutzer auf dem Server ordnungsgemäß abmelden kann.

Vielen Dank im Voraus für die Hilfe.

1.378 Beiträge seit 2006
vor 11 Jahren

Hallo csharp-user,

ich persönlich verwende das Windows-eigene Tool shutdown um meinen Rechner nach einer Zeit zB neuzustarten oder einfach auszuschalten.

How do I Shutdown - Restart - Logoff Windows via bat file

Lg, XXX

C
csharp-user Themenstarter:in
63 Beiträge seit 2011
vor 11 Jahren

Hallo xxxprod,

ich möchte nur gezielt einen Benutzer vom Terminalserver abmelden. Wenn ich den Befehl shutdown auf dem Server ausführe, dann fliegen alle User aus dem Server und ich fliege aus der Firma!

Ich suche eine Methode, wie z.B. BenutzerAbmelden(servername, username, password) Beim Aufruf der Methode soll der User ordnungsgemäß vom Remote Server abgemeldet werden.

3.728 Beiträge seit 2005
vor 11 Jahren
RDP Control einsetzen

Hallo csharp-user,

der folgende Artikel könnte für Dich interessant sein: Remote Desktop using C#.NET

Ansonsten solltest Du die Dokumentation der Remote Desktop Services API anschauen: Remote Desktop Services API (Windows)

Gruß
Rainbird

C
csharp-user Themenstarter:in
63 Beiträge seit 2011
vor 11 Jahren

Hallo Rainbird,

danke für den Tipp. Sobald ich eine lauffähige Methode habe, werde ich natürlich posten. Es heißt immer “Geben und Nehmen”.

C
csharp-user Themenstarter:in
63 Beiträge seit 2011
vor 11 Jahren

Ich verwende bereits das Projekt: Remote Desktop using C#.NET

Mit dem o.g. Projekt kann sich das Tool mit einem User "XYZ" an Terminalserver anmelden. Soweit so gut. Nur die Methode "Disconnect" schließt nur das RDP Fenster und die Einstellungen werden vom Betriebssystem nicht auf die Platte gespeichert!!

Deshalb suche ich z.Zt. eine Methode, die eine ordnungsgemäße Abmeldung verursacht, damit das Betriebssystem die Daten auf die Platte speichert.

1.378 Beiträge seit 2006
vor 11 Jahren

Hallo csharp-user,

hast du dir meinen Link überhaupt angesehen bzw. irgendetwas damit probiert? Ich vermute nicht sonst hättest du gesehen, dass man mit shutdown.exe -l den aktuellen User abmeldet und nicht nur den Computer runterfährt. Habs gerade hier mit einem Rechner mit 2 Usern drauf getestet und nur der aktuelle User, der das Script ausführte, wurde abgemeldet.

Lg, XXX

C
csharp-user Themenstarter:in
63 Beiträge seit 2011
vor 11 Jahren

Hallo xxxprod,

Du hast vollkommen recht. Ich muss nun schauen, wie ich den Befehl "shutdown -l" mit einem bestimmten User auf dem remote Server ausführen kann! Ich baue eine RDP Verbindung mit dem Projekt "http://www.codeproject.com/Articles/4370...top-using-C-NET". Ich muss unabhängig von dieser RDP Verbindung den User mit dem Befehl "shutdown -l" abmelden! Ich muss unter anderem auch testen, ob das Betriebssystem bei einem ganz neuen User das Verzeichnis Desktop anlegt, wenn ich "shutdown -l" ausführe!

Viele Grüße
csharp-user

1.378 Beiträge seit 2006
vor 11 Jahren

Vielleicht hilft dir das weiter: Running Remote Commands

Lg, XXX

16.806 Beiträge seit 2008
vor 11 Jahren

Remote Shutdown wird relativ einfach umzusetzen sein. Dafür gibts unzählige Tools, die das können.

Aber unter einem anderen User-Context, dessen Passwort Du nicht kennst: das wird nicht möglich sein, außer es ist eine Anwendung unter seinem Token aktiv, die das für Dich durchführt.

C
csharp-user Themenstarter:in
63 Beiträge seit 2011
vor 11 Jahren

Ich benutze nun das Programm "logoff.exe" vom Betriebssystem. Das Programm befindet sich unter "C:\Windows\System32". Ich rufe diese EXE (logoff.exe) aus meinem C# Programm auf, um den User auf dem Remoteserver abzumelden.

Aufruf: logoff.exe <Session-ID> /Server:<Servername oder IP>

                            Process process = new Process();
                            process.StartInfo.FileName = @"C:\Windows\System32\logoff.exe";
                            process.StartInfo.Arguments = sessionID + @" /Server:" + serverName;
                            process.StartInfo.RedirectStandardOutput = true;
                            process.StartInfo.UseShellExecute = false;
                            process.StartInfo.CreateNoWindow = true;
                            process.Start();

Die Session-ID kann vorher mit "C:\Windows\System32*quser.exe*" ermittelt werden.