2009-08-13 6 views
0

Ich schreibe eine App, um RDP-Konnektivität zu einer Bank von VM Windows 2003-Servern zu testen. Der typische Fehlermodus besteht darin, dass ein Code, der auf dem Server ausgeführt wird, sich selbst in eine Schleife versetzt, wodurch RDP-Verbindungen - und die meisten anderen Verbindungstypen - ebenfalls verhindert werden. Wenn das passiert, können Sie immer noch den Server anpingen und es scheint in Ordnung zu sein, aber Sie können nicht viel von etwas anderem tun.Wie automatisieren Sie das Testen der Verbindung zu Windows 2003 Server?

Ich verwende C#, .NET 3.5 und RDP Version 6.1 - Ich habe versucht, den ActiveX RDP-Client (MSTSC ..) zu starten, aber das erfordert menschliche Intervention und funktioniert nicht sehr gut. Ich habe hier einen anderen Beitrag gefunden, der eine mögliche Lösung von Expert Sexchange enthält, aber diese Lösung verwendet Java und die Net :: Telnet-Bibliothek, auf die ich keinen Zugriff habe.

Irgendwelche Ideen aus dem .NET-Camp?

Danke, Dave

Antwort

0

Sie können das undokumentierte WinStationServerPing API Anbindung an Terminal-Server überprüfen. Wenn diese Funktion erfolgreich ist, bedeutet das, dass Terminal Server verfügbar ist.

Dies ist die (Delphi) Signatur der Funktion (von winsta.dll exportiert):

function WinStationServerPing(hServer: HANDLE): BOOLEAN; stdcall; 
+0

Ich weiß nicht wirklich, ob das funktioniert oder nicht, da ich Jobs gewechselt habe und keinen Zugriff auf die ursprüngliche Anwendung habe. Trotzdem klingt es nach dem besten Ansatz, den ich bisher gehört habe ... – DaveN59

0

Verwenden Sie ein TCPClient zu versuchen und zu den Servern auf 3389 (oder was auch immer Port Sie sind so konfiguriert, für) anschließen, wenn Sie eine Verbindung trennen bekommen und Erfolg berichten, wenn die Verbindung Bericht abgelehnt Fehler.

class Program 
    { 
     static void Main(string[] args) 
     { 
      RDPAvailable("someserver", 3389); 
     } 
     public static bool RDPAvailable(string remoteHost, int port) 
     { 
      bool available=false; 
      try 
      { 
       TcpClient client = new TcpClient(remoteHost, port); 
       client.Close(); 
       available = true; 
      } 
      catch (Exception ex) 
      { 
       //do some logging or whatnot 
      } 
      return available; 
    } 

EDIT: Einige handliche Code

MsRdpClient51.Server = somServer 
MsRdpClient51.UserName = somUserID 
MsRdpClient51.Domain = someDomain 
MsRdpClient51.AdvancedSettings6.ClearTextPassword = somePassword 
MsRdpClient51.Connect 
+0

Haben Sie zufällig einen Link zu Beispiel-Code haben? (Ich will nicht viel, oder?) Dave – DaveN59

+0

Macht nichts, ich fand es in VS Hilfe ... Stellen Sie sich vor! – DaveN59

+0

lol, Nun, hier ist eine Konsole Beispiel sowieso;) – cmsjr