Как мне найти время и дату установки Windows?

134

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

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

Свободный антилоп гну
источник

Ответы:

90

В regedit.exeперейти к:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate

Она указывается в виде количества секунд с 1 января 1970 года. (Примечание: для Windows 10 эта дата будет датой, когда было установлено последнее обновление функции, а не исходной датой установки.)

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

Томми
источник
3
Это замечательно, есть ли какое-то особое место, куда вы пошли, чтобы получить эту информацию, или вы просто знали это?
Свободная антилопа гну
5
Прекрасно работает, за исключением случаев, когда Windows была установлена ​​с использованием образа диска. Есть ли способ проверить создание профиля пользователя, чтобы решить эту проблему?
Бернард Вандер Бекен
8
Не работает, отражает последнюю дату установки пакета обновления / обновления (например, ТЕКУЩУЮ версию, а не время установки исходной версии.
user3800527
2
Я думаю, что он дает последнюю дату обновления Windows, а не дату установки системы.
Таринду Сатишчандра
моя установка Windows 7 не показывает InstallDate в этом месте регистрации, его SP1.
user734028
175

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


systeminfo|find /i "original" 

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

ursprungligtursprü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;

В качестве альтернативы, CoastN предлагает в комментариях :

Поскольку при system.ini-fileобычном развертывании Windows остается нетронутым, вы можете получить дату установки, используя следующий oneliner:

(PowerShell): (Get-Item "C:\Windows\system.ini").CreationTime
VonC
источник
2
Я узнал почему. Это потому, что мой Windows не на английском языке. :)
Pedro77
3
Используйте systeminfo|find /i "original"только для фильтрации «Дата первоначальной установки». Если вы используете «установить» в качестве строки, вы получите больше информации, чем вам нужно. Кроме того, если локаль не английская, то это, вероятно, не будет работать. Это должно соответствовать языку. Для шведского это будет "ursprungligt" и "ursprüngliches" для немецкого языка.
Самир
1
Для меня systeminfo | find / i «original» вернул 30.06.2017, который должен был стать обновлением Windows, так как у меня была машина около 4 лет.
Тим
1
Я только что прошел через это, но с 245 исправлениями по умолчанию в окне CMD не было достаточно вертикальных линий для отображения всего вывода «systeinfo». Минуту чесал голову. После этого, чтобы это исправить: stackoverflow.com/questions/1740876/…
asdf30
1
Это показывает, что я установил систему две недели назад, но на самом деле это был год или два. Похоже, это дата последнего большого обновления.
Ганс
48

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

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

Дата первоначальной установки

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

  • в C:\Windows

Несколько файлов C: \ Windows

  • в C:\

Несколько файлов C: \

Николай Костов
источник
7
Лучше, чем другие ответы, но как насчет развернутых изображений?
user3800527
7
Это определенно ближе к правильному ответу; другие решения больше не работают с обновлениями Windows 10. Тем не менее, ни один из 5 файлов / папок, перечисленных здесь, не имел правильной даты в моей системе (некоторые были позже, а некоторые были на самом деле раньше). Однако в моей системе я обнаружил 1 файл и 2 папки с правильной датой: C: \ Windows \ hbcikrnl.ini, C: \ Windows \ symbols \, & C: \ Windows \ CSC \. Итак, если вы знаете, когда это было приблизительно, перейдите в C: \ Windows \, ​​покажите системные системные файлы, отсортируйте по дате и найдите что-то, что выглядит правильно.
Мэтт Якоби
Для моего Windows 10 system.ini, BOOTNXT и bootmgr имели правильную дату. У Win.ini & $ Recycle.Bin были более новые даты.
Кит
Дата для system.iniне имеет смысла на моих машинах Windows 7 и 2008, похоже, что созданная метка времени из источников установки копируется при установке. C:\pagefile.sysбыла правильная метка времени.
Даниэль Соколовский
38

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

диптангшу сенгупта
источник
1
Обратите внимание, что вы должны быть администратором, чтобы сделать это.
Барри Ридер
2
В Windows 7 это дает запись «Дата первоначальной установки», которая по некоторым причинам является 11.1.2002, что явно не правильно :(
silverchair
18

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

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

  • начать> введите CMD
  • введите systeminfo

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

ани александр
источник
13

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

Откройте командную строку (Пуск-> Выполнить -> введите cmd-> нажмите Enter) и выполните следующую команду

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

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

Робин
источник
3
пока вы не установите основной пакет обновления, он будет отображать эту дату
user3800527
12

В Powershell запустите команду:

systeminfo | Select-String "Install Date:"
user3827180
источник
2
Для Select-String требуется лучше использовать версию Windows PowerShell> 3.0find /i
sactiw
5

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

Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup\

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

 Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup\Source OS (Updated on xxxxxx)."

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

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

Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup\Source OS (Updated on xxxxxx)"

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

Амит Гупта
источник
4

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 .

InstallDate имеет формат UTC (ггггммддЧЧММСС.xxxxxx ± 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);      
    }
Markus
источник
Определение метки времени UNIX включает часовой пояс UTC. Если компьютер установлен в 18:00 по нью-йоркскому времени и 15:00 по времени в Сиэтле в тот же день, у них будет одинаковая отметка времени UNIX, поскольку они были установлены в одно и то же время по UTC. Если вы установили 1 апреля 2018 года в 15:00 в Сиэтле и переехали в Нью-Йорк, а затем перевели из UTC в местное время, это будет 1 апреля 2018 года в 18:00 и будет правильным, поскольку было 6 00:00 в Нью-Йорке, когда вы установили в Сиэтле.
августа
Спасибо jla, мне не понятно в моем посте. Когда вы изменяете часовой пояс на лету во время работы программы, изменение часового пояса не будет отражено. Вы должны перезапустить программу, чтобы часовой пояс вступил в силу. Это то же поведение, что и Powershell.
Маркус
InstallDate возвращает местное время с примененным текущим часовым поясом, а также часовой пояс в форме + XXX. При изменении часового пояса меняется дата установки, а также часовой пояс. Если дата установки в UTC была 2000-01-01T12: 00: 00Z. Дата установки 20000101120000.000000 + 000. Установите часовой пояс UTC + 5, и он станет 20000101170000.000000 + 300. При использовании вышеуказанного кода часовой пояс добавляется дважды. Чтобы получить дату UTC, строка «InstallDate =» должна быть изменена на: InstallDate = new DateTime (год, месяц, дата, час, минуты, секунды, msecs, DateTimeKind.Utc) - UTCoffset;
Хесус Диегес Фернандес
3

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

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

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

MoonDogg
источник
1
Это дало бы дату создания файла подкачки, которая совершенно не связана с датой установки самой ОС. Он может быть воссоздан по ряду причин и даже подделан, если вы действительно хотите. Это не надежный метод.
Алехандро
1
Он не «абсолютно не связан», так как создается при первоначальной установке. Поэтому, если он не был намеренно воссоздан или удален в какой-то момент, в «большинстве случаев» дата создания будет такой же, как и дата первоначальной установки, так как она сохраняется при обновлении. Да, это не на 100% надежно, но это быстро и легко, и я бы предположил, точнее, в гораздо большем числе случаев, чем нет. Определенно больше, чем многие ответы здесь.
MoonDogg
Вы можете воссоздать этот файл в любой момент, и если метод не гарантирует правильный результат 100% времени, никто не может на него положиться.
Слава Мурыгин
2

Определите дату установки Windows с помощью WMIC

wmic os get installldate

Лко Джеге
источник
1
Это, вероятно, просто читает раздел реестра InstallDate и имеет ту же проблему; это изменяется при обновлениях сборки.
Андерс
1

Используйте Speccy. Показывает дату установки в разделе «Операционная система». http://www.piriform.com/speccy

Амин
источник
1
Не программное решение. Если есть какой-то интерфейс, с которым Powershell (например) может взаимодействовать, перечислите его.
Тайлер Монтни
1

Вы также можете проверить галочку в любой папке на системном диске, например «windows» и «program files». Щелкните правой кнопкой мыши папку, выберите свойства и на вкладке «Общие» проверьте дату создания папки.

Тэкки
источник
5
Хотя действительный - это не решение для программирования
Мэтт Вилко
@ Matt Он дает вам алгоритм в Natural Lenguaje, так что просто скопируйте его на человеческом устройстве! : D
Джонатан
3
В более новых версиях Windows, в которых используется установка на основе образа ( .WIMфайлы), дата создания - это когда Microsoft создавал образ, а не когда ОС была установлена ​​на конкретном компьютере.
ctype.h
1

В RunCommand напишите "MSINFO32"и нажмите Enter. Он покажет всю информацию, связанную с системой.

Shailesh
источник
Вся информация кроме времени установки. Windows 7 SP1.
Павел Власов
0

Нажмите WindowsKey+ Rи введитеcmd

В командной строке введите:

systeminfo | find /i "Original"

(для более старых версий окон введите «ОРИГИНАЛ» заглавными буквами).

abdullahjavaid86
источник
Кто-нибудь знает, почему голосование против? Сработало для меня, может быть, это не точно по какой-то причине? Может быть, объясните, когда голосовали против
russelrillema
@russelrillema последний основной пакет обновлений отменяет эту дату.
Дон Томат
Если у вас Windows 10 v1809, зайдите в Настройки> Система> О программе. Найдите спецификацию Windows и там у вас есть поле с именем «Установить на». (Примечание: не уверен, работает ли он на старых версиях Windows)
abdullahjavaid86
0

Вы можете просто проверить дату создания папки Windows (щелкните правой кнопкой мыши на ней и проверьте свойства) :)

farhad.kargaran
источник
0

Вы можете сделать это с PowerShell:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\' -Name InstallDate |
    Select-Object -Property @{n='InstallDate';e={[DateTime]::new(1970,1,1,0,0,0,0,'UTC').AddSeconds($_.InstallDate).ToLocalTime()}}
Кусочки бекона
источник
0

Попробуйте эту команду powershell:

Get-ChildItem -Path HKLM:\System\Setup\Source* | 
 ForEach-Object {Get-ItemProperty -Path Registry::$_} | 
     Select-Object ProductName, ReleaseID, CurrentBuild, @{n="Install Date"; e={([DateTime]'1/1/1970').AddSeconds($_.InstallDate)}} | 
         Sort-Object "Install Date"
Futur'Fusionneur
источник
Практически верно, и это следует отметить намного больше, так как при этом учитываются обновления сборки, которые изменяют ключ в HKLM: \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion, но оба они должны быть объединены, поскольку ключи исходной ОС даже не присутствуют, если система фактически никогда не обновлялся (пока), а также будет отсутствовать дата последнего обновления сборки
Syberdoor