2010-05-14 95 views
3

是否有任何類可以在.net中獲取遠程PC的日期時間?爲了做到這一點,我可以使用計算機名稱或時區。對於每種情況,是否有不同的方式來獲取當前的日期時間?我使用Visual Studio 2005獲取遠程PC的日期時間?

+0

遠程PC是如何連接到你的機器?通過網絡?通過網絡? – 2010-05-14 19:05:41

+0

連接是通過網絡。我可以通過計算機名稱或IP ping到該框。 – 2010-05-15 03:05:39

+1

實際上,在我更新數據之前,我有SQL查詢從遠程PC獲取遠程時間(SELECT GetDateTime()),並且還希望向用戶顯示遠程日期時間。該查詢每2分鐘調用一次,並且我收到了一些異常(可能是由表單上的定時器引起的)。這就是爲什麼我正在考慮使用任何其他替代方法來獲取遠程日期時間。 – 2010-05-15 03:09:21

回答

1

您可以使用遠程WMI和Win32_TimeZone class。您確實需要具有在該計算機上執行WMI查詢的權限。通過使用UTC而不是當地時間避免這樣的麻煩。

5

我給你一個解決方案,它使用WMI。您可能會或可能不會需要域名和安全信息:在Windows機器上

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

net time \\<remote-ip address>得到一個遠程計算機的時間。你可以使用它來查找遠程系統時間,如果你想要代碼,你可以把它包裝在函數中來執行C#中的shell(DOS)函數。

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(); 
      }