2010-05-14 4 views
3

Есть ли какой-либо класс для получения даты удаленного ПК в .net? Для этого я могу использовать имя компьютера или часовой пояс. Для каждого случая существуют разные способы получить текущее время? Я использую Visual Studio 2005.Получить время удаленного ПК?

+0

Как удаленный компьютер, подключенный к вашей машине? Через сеть? Через Интернет? –

+0

Подключение осуществляется через сеть. Я могу пинговать в ящик по имени машины или ip. –

+1

На самом деле, у меня был SQL-запрос, чтобы получить удаленное время (SELECT GetDateTime()) с удаленного ПК, прежде чем я обновляю данные, а также хочу показать удаленное время дат для пользователя. Запрос вызывается каждые 2 минуты, и у меня есть некоторые исключения (может быть вызвано потоком от таймера в форме). Вот почему я думаю использовать другой альтернативный способ получить удаленное время дат. –

ответ

1

Вы можете использовать удаленный WMI и Win32_TimeZone class. Вам необходимо иметь разрешение на выполнение запросов WMI на этом компьютере. Избегайте таких хлопот, работая с UTC вместо местного времени.

5

Я даю вам решение, которое использует WMI. Вы можете или не можете нуждаться в информации о домене и безопасности:

try 
{ 
    string pc = "pcname"; 
    //string domain = "yourdomain"; 
    //ConnectionOptions connection = new ConnectionOptions(); 
    //connection.Username = some username; 
    //connection.Password = somepassword; 
    //connection.Authority = "ntlmdomain:" + domain; 

    string wmipath = string.Format("\\\\{0}\\root\\CIMV2", pc); 
    //ManagementScope scope = new ManagementScope(
    // string.Format("\\\\{0}\\root\\CIMV2", pc), connection); 
    ManagementScope scope = new ManagementScope(wmipath); 
    scope.Connect(); 

    ObjectQuery query = new ObjectQuery(
     "SELECT * FROM Win32_LocalTime"); 

    ManagementObjectSearcher searcher = 
     new ManagementObjectSearcher(scope, query); 

    foreach (ManagementObject queryObj in searcher.Get()) 
    { 
     Console.WriteLine("-----------------------------------"); 
     Console.WriteLine("Win32_LocalTime instance"); 
     Console.WriteLine("-----------------------------------"); 

     Console.WriteLine("Date: {0}-{1}-{2}", queryObj["Year"], queryObj["Month"], queryObj["Day"]); 
     Console.WriteLine("Time: {0}:{1}:{2}", queryObj["Hour"], queryObj["Minute"], queryObj["Second"]); 
    } 
} 
catch (ManagementException err) 
{ 
    Console.WriteLine("An error occurred while querying for WMI data: " + err.Message); 
} 
catch (System.UnauthorizedAccessException unauthorizedErr) 
{ 
    Console.WriteLine("Connection error (user name or password might be incorrect): " + unauthorizedErr.Message); 
} 
1

На машине Windows, есть net time \\<remote-ip address>, чтобы получить время удаленной машины. Вы можете использовать это, чтобы найти удаленное системное время, если вам нужен код, вы можете его обернуть в функции для выполнения функций оболочки (DOS) на C#.

1

Поскольку код WMI будет очень медленно, вы можете использовать следующий код, чтобы получить быстрые результаты

  string machineName = "vista-pc"; 

      System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo.UseShellExecute = false; 
      proc.StartInfo.RedirectStandardOutput = true; 
      proc.StartInfo.FileName = "net"; 
      proc.StartInfo.Arguments = @"time \\" + machineName; 
      proc.Start(); 
      proc.WaitForExit(); 

      List<string> results = new List<string>(); 
      while (!proc.StandardOutput.EndOfStream) 
      { 
       string currentline = proc.StandardOutput.ReadLine(); 
       if (!string.IsNullOrEmpty(currentline)) 
       { 
        results.Add(currentline); 
       } 
      } 

      string currentTime = string.Empty; 
      if (results.Count > 0 && results[0].ToLower().StartsWith(@"current time at \\" +            machineName.ToLower() + " is ")) 
      { 
       currentTime = results[0].Substring((@"current time at \\" + machineName.ToLower() + " is        ").Length); 

       Console.WriteLine(DateTime.Parse(currentTime)); 
       Console.ReadLine(); 
      } 
Смежные вопросы