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.
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
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.
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
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”.
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.
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
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
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.