2009-05-11 17 views
2

Ich schreibe ein C# -Programm, das eine Batch-Datei aufruft, die das Remote-System auf eine andere Partition bootet. Gibt es eine Möglichkeit zu wissen, wann das System neu gestartet wird? Ich würde gerne wissen, wann ich nach dem Neustart auf das Remote-System zugreifen kann.Ermitteln, wann ein Remote-System neu gestartet wird

+0

Wie geht es weiter auszuführen planen, wenn der Neustart durchgeführt wird? – Sake

+0

Sobald der Neustart abgeschlossen ist, werde ich "Image für Windows" verwenden, um ein Basis-Image zu installieren, und dann werde ich wieder auf die Partition neu starten, die ich gestartet habe. –

Antwort

6

Ich würde es pingen, um festzustellen, wann es wieder online ist. Es gibt eine Ping direkt in .net.

+0

Ich habe mir das angeschaut und ich denke es wird funktionieren. –

+3

Allerdings würde ich hier eine Auszeit setzen. Sagen Sie nach zwei Minuten Pingen, dass Sie aufgeben und einen Alarm auslösen oder einen Fehler melden. Es könnte gefährlich sein, für immer zu pingen. – uriDium

4

Wenn System A System B zum Neustart anweist, könnte es möglicherweise seine IP-Adresse (oder andere Kontaktinformationen) angeben, und dann im System B-Startprozess könnte es die Datei mit den Kontaktinformationen lesen und an System A zurückrufen.

0

Sie haben ein paar Optionen ...

Sie können versuchen, auf einem Netzwerkdienst auf dem anderen System, das heißt die Verbindung: verwenden Sie Ping als suggested by Jon B.

Wenn jedoch das System unter Ihrer Kontrolle steht, haben Sie andere Möglichkeiten. Sie können eine geplante Aufgabe einrichten (oder einen Dienst installieren), um beim Systemstart zu starten, und das andere System benachrichtigt Sie, wenn es online ist. Dies würde verhindern, dass Sie wiederholt pingen müssen.

+0

Ich versuche, eine Testumgebung mit einem neuen Image einzurichten. Sobald das System eingerichtet ist, werde ich versuchen, automatisierte Tests auszuführen. Daher kann ich das Remote-System möglicherweise nicht steuern, während ich es aufstelle. Die Ping-Option sollte funktionieren. –

+0

@Chris: Ja, wenn es ein neues Bild wird, ist Ping wahrscheinlich die beste Option. –

0

Ich wünschte, ich hätte diese Seite benutzt, bevor ich den ganzen Tag am Samstag damit verbracht habe, das herauszufinden. Danke für die Hilfe!! Unten ist, was ich getan habe. Dieser Code wird einen Computer anpingen und feststellen, wann er wieder online ist. Der nächste Schritt wird sein, zu bestimmen, ob ich eine Netzwerkverbindung zu dem Remote-Desktop-Port öffnen kann, wie zuvor vorgeschlagen. Fühlen Sie sich frei, irgendwelche Kommentare zum Code zu machen.

Hinweis: Hier sind die addierten mit Aussagen:

System.Net verwendet wird; // hinzugefügt using System.Net.NetworkInformation; // hinzugefügt using System.ComponentModel; // hinzugefügt mit System.Threading; // hinzugefügt

static void Main(string[] args) 
    { 
     string systemName = "172.30.11.148";  // Name of system beign pinged. System name used instead of ip due to DHCP 

     Ping pingSender = new Ping();      // Creates new ping object. 
     string data = "datadatadatadatadatadatadatadata"; // buffer of 32 bytes of data to transmit. 
     byte[] buffer = Encoding.ASCII.GetBytes(data);  // buffer containing data. 

     int pingTimeout = 120;   // Timeout in ms sent into pingSender. 
     int maxWaitTimeout = 60;  // Maximum time to wait for system to reboot. 
     int counter = 1;    // Used in while statement 
     bool connectStatus = false;  // State of system connection. 

     Console.WriteLine("Wait for reboot to start before trying to establish connection."); 
     //Thread.Sleep(30000);   // Waits 30 seconds at start of reboot to allow network to close. 
     Thread.Sleep(1000); 

     try 
     { 
      // Performs a ping on the system. If the system is available, while loop is exited and program 
      // continues. If the system is not available, program waits approximately 1 second and then 
      // pings the system again. 
      while (counter < maxWaitTimeout) 
      { 
       // Pings the system with 32 byts of data and waits for timeout 
       Console.WriteLine("Connection attempt #: " + counter + " of " + maxWaitTimeout); 
       PingReply reply = pingSender.Send(systemName, pingTimeout, buffer); 
       Console.WriteLine("Status of ping to: {0} - {1}", systemName, reply.Status); 

       if (reply.Status.ToString() == "Success") 
       { 
        connectStatus = true;      
        Console.WriteLine("\nRoundTrip time: {0}", reply.RoundtripTime); 
        Console.WriteLine("Time to live: {0}", reply.Options.Ttl); 
        Console.WriteLine("Buffer size: {0}", reply.Buffer.Length); 
        break; 
       } 

       Thread.Sleep(880); 
       counter += 1;     
      } // end while loop 

      if (connectStatus == true) 
      { 
       Console.WriteLine("\nAble to establish connection to: {0}", systemName); 
      } 
      else 
      { 
       Console.WriteLine("\nUnable to establish network connection using ping to: {0}", systemName); 
      } 
     } // end try 

     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine(ex.Message); 
     } 

     Console.ReadLine();  // Pause console 

    } // end main 
Verwandte Themen