2009-05-11 3 views
2

Я пишу программу C#, которая вызывает пакетный файл, который перезагружает удаленную систему в другой раздел. Есть ли способ узнать, когда система перезагружается? Я хотел бы знать, когда я могу получить доступ к удаленной системе после ее перезагрузки.Определите, когда удаленная система перезагружена.

+0

Что планируется выполнить в следующем, когда перезагрузка выполняется? – Sake

+0

После завершения перезагрузки я планирую использовать «образ для окон» для установки базового образа, а затем перезагрузиться к разделу, в котором я начал. – 2009-05-11 15:33:16

ответ

6

Я бы запросил его, чтобы определить, когда он вернулся в Интернет. Там есть Ping, встроенный в .net.

+0

Я изучил это, и я думаю, что это сработает. – 2009-05-11 15:38:32

+3

Однако я бы поставил таймаут в этом. Скажите, что после двух минут пингов вы сдаетесь, поднимите предупреждение или выбросите ошибку. Может быть опасно отбросить навсегда. – uriDium

4

Когда система A сообщает системе B перезагрузиться, возможно, она может предоставить свой IP-адрес (или другую контактную информацию), а затем в процессе запуска системы Bs он может прочитать файл с контактной информацией и перезвонить в систему A.

0

у вас есть несколько вариантов ...

Вы можете попытаться подключиться к сетевой службе другой системы, а именно: использовать Ping, как suggested by Jon B.

Однако, если система одна под вашим контролем, у вас есть другие возможности. Вы можете настроить запланированную задачу (или установить службу) для запуска при загрузке, а другая система сообщит вам, когда она находится в сети. Это помешало бы вам повторно использовать ping.

+0

Я пытаюсь создать тестовую среду с новым изображением. Как только система настроена, я попытаюсь запустить автоматические тесты. Таким образом, я могу не управлять удаленной системой, пока я ее настраиваю. Опция ping должна работать. – 2009-05-11 15:40:16

+0

@ Крис: Да, если это будет свежее изображение, пинг, вероятно, ваш лучший вариант. –

0

Хотелось бы, чтобы я использовал этот сайт, прежде чем провел весь субботний день, пытаясь понять это. Спасибо за помощь!! Ниже я закончил делать. Этот код будет пинговать компьютер и определять, когда он снова подключен к сети. Следующим шагом будет определить, могу ли я открыть сетевое подключение к удаленному рабочему порту, как было предложено ранее. Не стесняйтесь комментировать код.

Примечание: Вот добавленные с помощью заявления:

с использованием System.Net; // добавлено с использованием System.Net.NetworkInformation; // добавлено с использованием System.ComponentModel; // добавлено с использованием System.Threading; // добавлено

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 
Смежные вопросы