Як знайти час встановлення та дату встановлення 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
Це чудово, чи є спеціальне місце, куди ви пішли, щоб отримати цю інформацію, чи просто ви її знали?
Безкоштовно Wildebeest

5
Чудово працює, за винятком випадків, коли Windows була встановлена ​​за допомогою образу диска. Чи є спосіб перевірити створення профілю користувачів, щоб вирішити цю проблему?
Бернард Вандер Став

8
Робота не відображає останню дату встановлення
сервісного пакета

2
Я думаю, що він дає останню дату оновлення Windows, замість встановленої системою дати.
Тарінду Сатішандра

у моїй установці Windows 7 не відображається InstallDate у тому місці реєстру, його SP1.
користувач734028

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

У Дельфі 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

2
Я дізнався, чому. Це тому, що моя Windows не англійською мовою. :)
Pedro77

3
Використовуйте systeminfo|find /i "original"лише для фільтрації "Початкової дати встановлення". Якщо ви використовуєте "встановити" як рядок, ви отримаєте більше інформації, ніж вам потрібно. Крім того, якщо мова не є англійською, це, ймовірно, не буде працювати. Це має відповідати мові. Для шведської мови це було б "ursprungligt" і "ursprüngliches" для німецької.
Самір

1
Для мене systeminfo | find / i "оригінал" повернувся 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.

Оригінальна дата встановлення

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

  • в C:\Windows

Мало файлів C: \ Windows

  • в C:\

Мало C: \ файлів


7
Краще, ніж інші відповіді, а як щодо зображень розгортання?
користувач3800527

7
Це, безумовно, ближче до правильної відповіді; інші рішення більше не працюють з оновленнями Windows 10. Однак жоден із 5 перелічених тут файлів / папок не мав правильної дати в моїй системі (деякі були пізніше, а деякі - де раніше). Однак у моїй системі я знайшов 1 файл і 2 папки з правильною датою: C: \ Windows \ hbcikrnl.ini, C: \ Windows \ символи \, & 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 " і натисніть клавішу Enter. Вашій системі може знадобитися кілька хвилин, щоб отримати інформацію. На сторінці результатів ви знайдете запис як "Дата встановлення системи". Це дата встановлення вікон. Цей процес працює в XP, Win7, а також у win8.


1
Зауважте, що для цього вам потрібно бути адміністратором.
Barrie Reader

2
У Windows 7 це дає «Original Install Date» запис , яка з якоїсь - то причини 11.1.2002, що явно не є правильним :(
Silverchair

18

Як дізнатися дату та час встановлення Windows 7:

просто дивіться це ...

  • пуск> введіть CMD
  • введіть систему інформації

Це воно; тоді ви можете побачити всю інформацію про вашу машину; дуже простий метод


13

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

Відкрийте командний рядок (start-> run -> type cmd-> hit enter) та запустіть наступну команду

systeminfo | find / i "дата встановлення"

Через пару секунд ви побачите дату встановлення


3
поки ви не встановите основний пакет оновлень, він відображає цю дату
user3800527

12

У Powershell запустіть команду:

systeminfo | Select-String "Install Date:"

2
Select-String вимагає версії Windows PowerShell> 3.0 для кращого використанняfind /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 (yyyymmddHHMMSS.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);      
    }

Визначення часової позначки UNIX включає часовий пояс, UTC. Якщо комп’ютер буде встановлено о 18:00 за нью-йоркським часом та 15:00 в Сіетлі в той же день, вони матимуть ту саму часову марку UNIX, оскільки вони були встановлені в той самий час UTC. Якщо ви встановили 1 квітня 2018 року о 15:00 в Сіетлі і переїжджаєте до Нью-Йорка, а потім конвертуєте з UTC у ваш місцевий час, це скаже 1 квітня 2018 року о 18:00 та буде правильним, адже це було 6 : 00:00 в Нью-Йорку, коли ви встановили в Сіетлі.
jla

Дякую, Джла, мені не було зрозуміло у своєму дописі. Якщо ви змінюєте часовий пояс під час руху під час роботи програми, зміна часового поясу не відображатиметься. Вам потрібно перезапустити програму, щоб набути чинності часовий пояс. Це така ж поведінка, як і Пауершелл.
Маркус

InstallDate повертає місцевий час із застосованим поточним часовим поясом, а також часовий пояс у формі + XXX. Коли часовий пояс змінюється, змінюється дата встановлення, а також часовий пояс. Якщо дата установки в UTC була 2000-01-01T12: 00: 00Z. InstallDate становить 20000101120000.000000 + 000. Встановіть часовий пояс на UTC + 5, і він стане 20000101170000.000000 + 300. При використанні вищевказаного коду часовий пояс додається двічі. Щоб отримати дату UTC, рядок "InstallDate =" слід змінити на: InstallDate = новий DateTime (рік, місяць, дата, година, хвилини, секунди, мсек, DateTimeKind.Utc) - UTCoffset;
Jesús Diéguez Fernández

3

Я вважаю, що дату створення c: \ pagefile.sys може бути досить надійною у більшості випадків. Його можна легко отримати за допомогою цієї команди (якщо припустимо, що Windows встановлено на C :):

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

'/ As' вказує 'системні файли', інакше його не знайти. '/ T: c' встановлює часове поле для відображення "створення".


1
Це дало б дату створення файлу сторінки, що абсолютно не пов'язане з датою встановлення самої ОС. Його можна відтворити з кількох причин і навіть підробити, якщо дуже хочеться. Це не надійний метод.
Алехандро

1
Це не "абсолютно не пов'язано", як це створюється під час початкової установки. Тому, якщо це не було навмисно відтворено або видалено в якийсь момент, у "більшості випадків" дата створення буде такою ж, як і початкова дата встановлення, як це зберігається через оновлення. Так, це не на 100% надійно, але це швидко і просто, і я б здогадався точним у набагато більше випадках, ніж ні. Однозначно більше, ніж багато відповідей тут.
MoonDogg

Ви можете створити цей файл в будь-який момент, і якщо метод не гарантує правильний результат 100% часу, ніхто не може покластись на нього.
Слава

2

Визначте дату встановлення Windows за допомогою WMIC

wmic os отримати встановлення


1
Це, ймовірно, просто читає ключ реєстру InstallDate і має ту ж проблему; вона змінюється на оновленнях збірки.
Андерс

1

Використовуйте speccy. Він показує дату встановлення в розділі Операційна система. http://www.piriform.com/speccy


1
Не програмне рішення. Якщо є якийсь інтерфейс, з яким Powershell (наприклад) може взаємодіяти, перерахуйте його.
Тайлер Монтні

1

Ви також можете перевірити прапорець будь-якої папки на системному диску, наприклад "windows" та "program файли". Клацніть правою кнопкою миші папку, натисніть на властивості та перевірте на загальній вкладці дату, коли папка була створена.


5
Хоча дійсно - це не програмне рішення
Метт Вілько

@Matt Він дає вам алгоритм в Natural Lenguaje, тому просто скопіюйте його в людський пристрій! : D
Джонатан

3
У новіших версіях Windows, які використовують встановлення на основі зображень ( .WIMфайлів), дата створення створюється, коли Microsoft створює зображення, а не тоді, коли ОС встановлюється на конкретній машині.
ctype.h

1

У RunCommand напишіть "MSINFO32"і натисніть клавішу В ньому буде показана вся інформація, що стосується системи


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


0

Натисніть WindowsKey+ Rі введітьcmd

У вікні командного типу:

systeminfo | find /i "Original"

(для старих версій Windows введіть "ORIGINAL" великими літерами).


Хтось знає, чому голосування проти? Працював для мене, може, це чомусь не точно? Можливо, поясніть, коли
віддаєте

@russelrillema останній великий пакет оновлень перевищує цю дату.
Дон Томат

Якщо у вас Windows 10 v1809, перейдіть у Налаштування> Система> Про. Знайдіть специфікацію Windows і там у вас є поле під назвою "Встановити". (Примітка. Не впевнений, чи працює він у старих версіях Windows)
abdullahjavaid86

0

Ви можете просто перевірити дату створення папки Windows (клацніть правою кнопкою миші та перевірити властивості) :)


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

Спробуйте цю команду:

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"

Майже правда, і це слід зазначити набагато більше, оскільки тут враховуються оновлення збірки, які змінюють ключ у HKLM: \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion, але потрібні обоє комбіновані, оскільки клавіші вихідної ОС відсутні навіть у системі ніколи фактично не оновлювались (поки що), а також не буде пропущено дату останнього оновлення збірки
Syberdoor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.