2010-07-19 3 views
4

Я пишу тестовое приложение, которое управляет другим компьютером. Тест-компьютер запускается путем отправки командной строки через порт RS-232 (с управляющего компьютера под управлением Windows XP с пакетом обновления 2 (SP2) с использованием приложения C#), после чего тестовый компьютер включится и загрузится в Windows XP. Я хотел бы знать, какой был бы лучший способ определить, когда этот компьютер завершил процесс загрузки и работает нормально.Загрузился и запущен лучший способ определения удаленного компьютера

Я думал следующее:

1) Я был либо мышление пинга, что компьютер или
2) имеет общий диск, и если доступ к этому общему диску или
3) Запись небольшой сервис, с которым я могу общаться с

Есть ли другой подход?

Марк

ответ

0

У меня была точная проблема, с которой вы столкнулись, я обнаружил, что написать пользовательскую услугу было наиболее полезным. (На самом деле мне нужно было знать, когда безголовая машина была готова к подключению службы удаленных рабочих столов, программа, которую я написал, на самом деле подает звуковой сигнал на динамик ПК, когда он готов к регистрации.

EDIT: я откопал источник в случае, если вы заинтересованы, где

using System.ComponentModel; 
using System.Configuration.Install; 
using System.Runtime.InteropServices; 
using System.ServiceProcess; 
using System.Threading; 

namespace Beeper 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     static void Main() 
     { 
      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] 
       { 
        new Beeper() 
       }; 
      ServiceBase.Run(ServicesToRun); 
     } 
    } 

    public partial class Beeper : ServiceBase 
    { 
     public Beeper() 
     { 
     } 

     protected override void OnStart(string[] args) 
     { 
      if (MainThread != null) 
       MainThread.Abort(); 
      MainThread = new Thread(new ThreadStart(MainLoop)); 
      MainThread.Start(); 
     } 

     protected override void OnStop() 
     { 
      if (MainThread != null) 
       MainThread.Abort(); 
     } 

     protected void MainLoop() 
     { 
      try 
      { 
       //main code here 
      } 
      catch (ThreadAbortException) 
      { 
       //Do cleanup code here. 
      } 
     } 

     System.Threading.Thread MainThread; 
    } 
    [RunInstaller(true)] 
    public class BeeperInstaller : Installer 
    { 
     private ServiceProcessInstaller processInstaller; 
     private ServiceInstaller serviceInstaller; 
     public BeeperInstaller() 
     { 
      processInstaller = new ServiceProcessInstaller(); 
      serviceInstaller = new ServiceInstaller(); 
      processInstaller.Account = ServiceAccount.LocalSystem; 
      serviceInstaller.StartType = ServiceStartMode.Automatic; 
      serviceInstaller.ServiceName = "MyProgram"; 
      serviceInstaller.ServicesDependedOn = new string[] { "TermService" }; //Optional, this line makes sure the terminal services is up and running before it starts. 
      Installers.Add(serviceInstaller); 
      Installers.Add(processInstaller); 
     } 
    } 
} 
+0

Просто любопытно:. почему бы не вы, в этом сценарии, просто запросить порт RDP Если вы хотите получить ответ, это до – Abel

+0

Так что я не?. нужно постоянно кликать на соединение, чтобы увидеть, когда он будет готов. Когда я услышу тон, он напоминает мне, что я запускаю mstsc и подключаюсь. –

+0

Похоже, что разработка службы, вероятно, является наилучшим подходом, хотя я могу полагаться на общая папка в качестве пользователя * ma y * необходимо войти в систему, чтобы запустить некоторое тестовое программное обеспечение, если оно не будет работать без входа пользователя в систему. Мне все равно нужно проверить, будет ли тестовое программное обеспечение работать без входа пользователя в систему. В любом случае я могу проверить сервис, чтобы узнать, зарегистрирован ли пользователь, а затем отправить сигнал на ПК контроллера, чтобы запустить тест. Я выбрал ответ Скотта, поскольку он был достаточно любезен, чтобы предоставить исходный код для моей причины. – lordhog

1

Все зависит от того, что вы считаете «завершил процесс загрузки и работает нормально». Например, если все, что вам нужно, - это момент, когда сетевая карта инициализирована, pinging может быть хорошим (пока порт ECHO не закрыт).

Акция не является хорошей идеей, поскольку они обычно становятся доступными только при входе пользователя в систему, что может быть или не быть в зависимости от вашей ситуации. Но даже если, что, если вы измените конфигурацию или решите, что это нарушение безопасности для открытия доли?

Если вы хотите играть в нее определенно, или вам просто нужно подождать до , все сервисы начались, вы должны рассмотреть свой третий вариант. Это проще всего сделать. Пусть он прослушивает порт 80 и запускается из IIS. При запросе он может ответить на некоторые детали машины. Это также даст вам максимальную гибкость. Использование IIS помогает вам не писать собственный сервис и делает его тривиальным для установки и настройки.

Если IIS не является вариантом, вы можете, конечно, рассмотреть возможность написания собственного сервиса. Не так сложно сделать, но вам потребуется написать код для прослушивания определенных портов.

Смежные вопросы