Hallo,
Ich habe mal beispielhaft folgenden Code:
Process rdpConnection = new Process();
rdpConnection.StartInfo.FileName = Environment.ExpandEnvironmentVariables( @"%SystemRoot%\system32\cmdkey.exe" );
rdpConnection.StartInfo.Arguments = "/generic:TERMSRV/192.168.1.xxx /user:abc /pass:abc";
rdpConnection.Start();
rdpConnection.StartInfo.FileName = Environment.ExpandEnvironmentVariables( @"%SystemRoot%\system32\mstsc.exe" );
rdpConnection.StartInfo.Arguments = connectionParameter;
rdpConnection.Start();
// rdpConnection.WaitForExit();
rdpConnection.StartInfo.FileName = Environment.ExpandEnvironmentVariables( @"%SystemRoot%\system32\cmdkey.exe" );
rdpConnection.StartInfo.Arguments = "/delete:TERMSRV/192.168.1.xxx";
rdpConnection.Start();
Wie man erkennen kann, rufe ich damit eine RDP Connection auf, was auch einwandfrei funktioniert.
Was mich stört, ist daß die Zugangsdaten in der cmdkey nach dem Schliessen der RDP Connection erhalten bleiben.
Diese will ich über den dritten Block wieder entfernen.
Lasse ich allerdings das WaitForExit() weg, wie oben gezeigt, löscht er die Daten natürlich sofort, so daß ich aufgefordert werde, Benutzername und Passwort für die Verbindung anzugeben.
Setze ich das WaitForExit() ein, passiert exakt dasselbe?!
Auch folgender "trick", den ich gefunden hatte, hat nichts geholfen:
while ( !rdpConnection.HasExited );
Ich habe einige Foren-Beiträge gelesen und auch im MSDN geschaut und festgestellt, daß es nicht ganz falsch sein kann, was ich da vorhabe.
Kann mir jemand sagen, wo genau ich das nicht verstanden habe oder wo ich etwas umbauen muß?
Danke
Das Problem ist das mstsc.exe trotz WaitForExit() sofort zurückkehrt (auch wenn das Remote Fenster noch offen ist). Kannst du mit folgendem Code ausporbieren:
Process.Start(@"C:\Windows\System32\mstsc.exe").WaitForExit();
Das Programm läuft ungebremst weiter.
Mit folgendem Code hat es funktioniert:
Process.Start(@"C:\Windows\System32\mstsc.exe").WaitForExit();
Process.GetProcessesByName("mstsc")[0].WaitForExit();
Wirklich schön ist das nicht und wenn bereits ein "mstsc" läuft müsste man irgendwie sicherstellen das der richtige Prozess von GetProcessesByName verwendet wird.
Joa, vielen Dank, das hat schon mal gewirkt.
Wenn ich noch eine Frage bzgl. des Process Indexes stellen dürfte, gibt es ein Möglichkeit, den Index des gestarteten Prozesses herauszufinden?
So daß ich es so anwenden könnte, bspw.:
Process.getProcessByName( "mstsc" )[myProcessIndex].WaitForExit();
Der Grund ist der, daß evtl. auch mal zwei oder drei RDPs offen sein könnten...
Okay der Grund warum der ursprünglich code nicht funktioniert ist hier beschrieben: starting-remote-desktop-client-no-control-over-pid-kill-pid-changes-after-star
Es ist auch ein Lösungsansatz beschrieben der wesentlich schöner ist als meiner 😉.