Как мне найти время и дату установки Windows? - PullRequest
113 голосов
/ 04 октября 2008

Это может звучать немного странно, но как я могу узнать (надеюсь, через API / ключ реестра) время и дату установки Windows?

Лучшее, что я могу придумать, - это посмотреть на различные файлы в C: \ Windows и попытаться угадать ... но это не совсем хорошее решение.

Ответы [ 15 ]

160 голосов
/ 04 октября 2008

Еще один вопрос, который можно задать для ' code-challenge ': вот несколько исполняемых файлов исходного кода для решения проблемы, но они не завершены.
Вы найдете скрипт vb, который любой может выполнить на своем компьютере с ожидаемым результатом?


systeminfo|find /i "original" 

даст вам фактическую дату ... а не количество секунд;)
Как Сэмми комментирует , find /i "install" дает больше, чем нужно.
И это работает, только если локаль английская: она должна соответствовать языку.
Для шведского языка это будет "ursprungligt" и "ursprüngliches" для немецкого.


В Windows PowerShell , вы можете просто набрать:

PS > $os = get-wmiobject win32_operatingsystem
PS > $os.ConvertToDateTime($os.InstallDate) -f "MM/dd/yyyy" 

С помощью WMI ( Инструментарий управления Windows )

Если вы не используете WMI, вы должны прочитать, а затем преобразовать значение реестра:

PS > $path = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
PS > $id = get-itemproperty -path $path -name InstallDate
PS > $d = get-date -year 1970 -month 1 -day 1 -hour 0 -minute 0 -second 0
## add to hours (GMT offset)
## to get the timezone offset programatically:
## get-date -f zz
PS > ($d.AddSeconds($id.InstallDate)).ToLocalTime().AddHours((get-date -f zz)) -f "MM/dd/yyyy"

Остальная часть этого поста дает вам другие способы доступа к той же информации. Выбери свой яд;)


В VB.Net это выдает что-то вроде:

Dim dtmInstallDate As DateTime
Dim oSearcher As New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
For Each oMgmtObj As ManagementObject In oSearcher.Get
    dtmInstallDate =
        ManagementDateTimeConverter.ToDateTime(CStr(oMgmtO bj("InstallDate")))
Next

В Autoit (язык сценариев Windows) это будет:

;Windows Install Date
;
$readreg = RegRead("HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\", "InstallDate")
$sNewDate = _DateAdd( 's',$readreg, "1970/01/01 00:00:00")
MsgBox( 4096, "", "Date: " & $sNewDate )
Exit

В Delphy 7 это будет выглядеть так:

Function GetInstallDate: String;
Var
  di: longint;
  buf: Array [ 0..3 ] Of byte;
Begin
  Result := 'Unknown';
  With TRegistry.Create Do
  Begin
    RootKey := HKEY_LOCAL_MACHINE;
    LazyWrite := True;
    OpenKey ( '\SOFTWARE\Microsoft\Windows NT\CurrentVersion', False );
    di := readbinarydata ( 'InstallDate', buf, sizeof ( buf ) );
//    Result := DateTimeToStr ( FileDateToDateTime ( buf [ 0 ] + buf [ 1 ] * 256 + buf [ 2 ] * 65535 + buf [ 3 ] * 16777216 ) );
showMessage(inttostr(di));
    Free;
  End;
End;
82 голосов
/ 04 октября 2008
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate

В качестве количества секунд с 1 января 1970 года.

Чтобы преобразовать это число в читаемую дату / время, просто вставьте десятичное значение в поле «UNIX TimeStamp:» этого Онлайн-инструмента преобразования времени Unix .

36 голосов
/ 14 июня 2017

У нас здесь достаточно ответов, но я хочу поставить свои 5 центов.

У меня Windows 10 установлена ​​на 10/30/2015, а Creators Update установлена ​​на 04/14/2017 поверх моей предыдущей установки. Все методы, описанные в предыдущих ответах, дают мне дату установки Обновления Создателей.

Original Install Date

Мне удалось найти дату создания нескольких файлов, которая соответствует реальной (чистой) дате установки моей Windows 10:

  • в C:\Windows

Few C:\Windows files

  • в C:\

Few C:\ files

34 голосов
/ 23 ноября 2012

Откройте командную строку, введите « systeminfo » и нажмите ввод. Ваша система может занять несколько минут, чтобы получить информацию. На странице результатов вы найдете запись «Дата установки системы». Это дата установки Windows. Этот процесс работает в XP, Win7, а также на win8.

16 голосов
/ 28 апреля 2011

Как узнать дату / время установки Windows 7:

просто посмотрите это ...

  • Пуск> введите CMD
  • введите systeminfo

вот и все; тогда вы сможете увидеть всю информацию о вашей машине; очень простой метод

12 голосов
/ 09 января 2014

Вы когда-нибудь хотели узнать дату установки операционной системы вашего ПК? Вот быстрый и простой способ узнать дату и время установки (или последнего обновления) операционной системы вашего ПК.

Откройте командную строку (start-> run -> type cmd-> hit enter) и выполните следующую команду

systeminfo | найти / я "дата установки"

Через пару секунд вы увидите дату установки

8 голосов
/ 11 июля 2014

В Powershell выполните команду:

systeminfo | Select-String "Install Date:"
4 голосов
/ 07 апреля 2017

HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ InstallDate и systeminfo.exe выдает неправильную дату .

Определение метки времени UNIX не зависит от часового пояса. Отметка времени UNIX определяется как количество секунд, прошедших с 00:00:00 по всемирному координированному времени (UTC), четверг, 1 января 1970 года, без учета високосных секунд.

Другими словами, если вы установили свой компьютер в Сиэтле, штат Вашингтон, и переехали в Нью-Йорк, штат Нью-Йорк, HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ InstallDate не будет отражать это. Это неправильная дата , она не хранит часовой пояс, в котором был изначально установлен компьютер.

В результате, , если вы измените часовой пояс во время работы этой программы, дата будет неправильной. Вы должны повторно запустить исполняемый файл, чтобы он учитывал изменение часового пояса.

Но вы можете получить информацию о часовом поясе от WMI Win32_Registry class.

InstallDate в формате UTC (ггггммддЧЧММСС.хххххх ± UUU) согласно Microsoft TechNet статья «Работа с датами и временем с использованием WMI», где, в частности, xxxxxx - это миллисекунды, а ± UUU - количество минут, отличное от Время по Гринвичу.

 private static string RegistryInstallDate()
    {

        DateTime InstallDate = new DateTime(1970, 1, 1, 0, 0, 0);  //NOT a unix timestamp 99% of online solutions incorrect identify this as!!!! 
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Registry");

        foreach (ManagementObject wmi_Windows in searcher.Get())
        {
            try
            {
                ///CultureInfo ci = CultureInfo.InvariantCulture;
                string installdate = wmi_Windows["InstallDate"].ToString(); 

                //InstallDate is in the UTC format (yyyymmddHHMMSS.xxxxxx±UUU) where critically
                // 
                // xxxxxx is milliseconds and       
                // ±UUU   is number of minutes different from Greenwich Mean Time. 

                if (installdate.Length==25)
                {
                    string yyyymmddHHMMSS = installdate.Split('.')[0];
                    string xxxxxxsUUU = installdate.Split('.')[1];      //±=s for sign

                    int year  = int.Parse(yyyymmddHHMMSS.Substring(0, 4));
                    int month = int.Parse(yyyymmddHHMMSS.Substring(4, 2));
                    int date  = int.Parse(yyyymmddHHMMSS.Substring(4 + 2, 2));
                    int hour  = int.Parse(yyyymmddHHMMSS.Substring(4 + 2 + 2, 2));
                    int mins  = int.Parse(yyyymmddHHMMSS.Substring(4 + 2 + 2 + 2,  2));
                    int secs  = int.Parse(yyyymmddHHMMSS.Substring(4 + 2 + 2 + 2 + 2, 2));
                    int msecs = int.Parse(xxxxxxsUUU.Substring(0, 6));

                    double UTCoffsetinMins = double.Parse(xxxxxxsUUU.Substring(6, 4));
                    TimeSpan UTCoffset = TimeSpan.FromMinutes(UTCoffsetinMins);

                    InstallDate = new DateTime(year, month, date, hour, mins, secs, msecs) + UTCoffset; 

                }
                break;
            }
            catch (Exception)
            {
                InstallDate = DateTime.Now; 
            }
        }
        return String.Format("{0:ddd d-MMM-yyyy h:mm:ss tt}", InstallDate);      
    }
2 голосов
/ 06 июня 2018

Я считаю, что дата создания c: \ pagefile.sys может быть довольно надежной в большинстве случаев. Его можно легко получить с помощью этой команды (при условии, что Windows установлена ​​на C:):

dir /as /t:c c:\pagefile.sys

«/ as» определяет «системные файлы», в противном случае он не будет найден. «/ T: c» устанавливает поле времени для отображения «создание».

2 голосов
/ 16 ноября 2017

ОС Windows 10 имеет еще один раздел реестра, этот в файле куста SYSTEM:

> "\Setup\Source OS."

Информация о дате установки здесь представляет собой дату / время установки оригинальной операционной системы компьютера. Он также сообщает вам, когда началось обновление, то есть

 "\Setup\Source OS (Updated on xxxxxx)."

Конечно, это может не произойти, когда обновление заканчивается, пользователь может отключить его вместо перезагрузки при появлении запроса и т. Д.

Обновление может завершиться в другой день, а

> "\Setup\Source OS (Updated on xxxxxx)"

будет отражать дату / время начала обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...