Дата установки Windows через WMI возвращает разные значения
Я использую WMI, чтобы получить дату установки windows вместе с другой информацией реестра, и в зависимости от того, как я ее запрашиваю, значение будет разным.
К сожалению, я не знаю, чем это отличается - все, что у меня есть, это CRC, и это другое.
В конечном счете я использую этот код:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"); foreach (ManagementObject wmi_Windows in searcher.Get()) { try { s = wmi_Windows["InstallDate"].ToString(); DateTime dc = ToDateTime(s); WindowsInfo.InstallDate = dc.AddTicks(-TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Ticks).ToLocalTime().ToString(); break; } catch (Exception ex) { //stuff here } }
Допустим, этот код относится к классу А. Если я вызываю метод, содержащий этот код, через класс B, я получаю один результат, но если я использую класс C для вызова класса B для вызова класса A, результат будет другим. Правда, только для некоторых компьютеров. Конечно, компьютеры в офисе вообще не имеют этой проблемы.
Есть ли у кого-нибудь идеи относительно того, как я мог бы получить различные значения для даты установки? Другие вещи, такие как серийный номер windows, неизменно возвращаются одинаково. Кроме того, компьютеры, которые имеют эту проблему, не все возвращают одно и то же значение, поэтому значения-это не просто дата CRC по умолчанию.
Обновление:
Я пишу небольшое приложение для запуска на клиентском компьютере, которое печатает s, dc и WindowsInfo.InstallDate сверху, а также запустил systeminfo в run и запустил три вещи в PowerShell
(Get-WmiObject Win32_OperatingSystem).InstallDate ([WMI]'').ConvertToDateTime((Get-WmiObject Win32_OperatingSystem).InstallDate) [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($(get-itemproperty 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion').InstallDate))
И все получало одни и те же ответы
20110411090106.000000+120 11. april 2011 09:01:06 11.04.2011 09:01:06
Таким образом, проблема возникает только в приложении, когда выполняется один и тот же код из двух разных классов.
Zoltán Zörgő
То wmi_Windows["InstallDate"]
ценность сама по себе различна, или WindowsInfo.InstallDate
вы рассчитали? Вы получите тот же (несогласованных) результат действия или PowerShell? Смотрите это: http://blogs.sepago.de/helge/2009/09/24/how-to-determine-the-windows-installation-date-with-and-without-powershell/
standgale
Единственная информация, которую я имею от проблемных компьютеров, - это CRC, вычисленный по возвращаемому значению, которое является WindowsInfo.Установочная дата, которая вычисляется.
Но да, расчет может возвращать другое значение.
Два разных значения были возвращены с интервалом в 9 секунд в течение одного и того же запуска приложения.
Zoltán Zörgő
Вы должны выяснить, есть ли проблема с wmi или кодом. Вы можете удаленно WMI-запрос на конкретные машины? Какая ОС на них стоит?
В чем проблема с инструментами, предоставляемыми фреймворком для преобразования в UTC: http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime (v=против 100). aspx ?