Come posso trovare l'ora e la data di installazione di Windows?


134

Potrebbe sembrare una domanda un po 'folle, ma come posso scoprire (si spera tramite una chiave API / registro) l'ora e la data di installazione di Windows?

Il meglio che posso inventare finora è guardare vari file in C: \ Windows e provare a indovinare ... ma questa non è esattamente una buona soluzione.

Risposte:


90

In regedit.exevai a:

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

Viene indicato come il numero di secondi dal 1 ° gennaio 1970. (Nota: per Windows 10, questa data sarà quando è stato installato l'ultimo aggiornamento della funzionalità, non la data di installazione originale.)

Per convertire quel numero in una data / ora leggibile basta incollare il valore decimale nel campo "UNIX TimeStamp:" di questo strumento online Unix Time Conversion .


3
Fantastico, c'è un posto speciale in cui sei andato per ottenere queste informazioni o lo sapevi?
Gnu gratuito,

5
Funziona alla grande, tranne se Windows è stato installato utilizzando un'immagine del disco. Esiste un modo per verificare la creazione del profilo degli utenti per risolvere questo problema?
Bernard Vander Beken,

8
Non funziona riflette la data di installazione dell'ultimo servicepack / aggiornamento (ea la versione CORRENTE, non l'ora di installazione della versione originale.
user3800527

2
Penso che fornisca l'ultima data di Windows aggiornata, anziché la data di installazione del sistema.
Tharindu Sathischandra il

la mia installazione di Windows 7 non mostra InstallDate in quella posizione del registro, il suo SP1.
user734028

175

Un'altra domanda comprensibile per una " sfida del codice ": ecco alcuni eseguibili del codice sorgente per rispondere al problema, ma non sono completi.
Troverai uno script vb che chiunque può eseguire sul proprio computer, con il risultato atteso?


systeminfo|find /i "original" 

ti darebbe la data effettiva ... non il numero di secondi;)
Come commenta Sammy , dà più del necessario. E questo funziona solo se la locale è l'inglese: deve corrispondere alla lingua. Per lo svedese questo sarebbe " " e " " per il tedesco.find /i "install"

ursprungligtursprüngliches


Nello script di Windows PowerShell , puoi semplicemente digitare:

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

Utilizzando WMI ( Strumentazione gestione Windows )

Se non si utilizza WMI, è necessario leggere quindi convertire il valore di registro:

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"

Il resto di questo post offre altri modi per accedere a quelle stesse informazioni. Scegli il tuo veleno ;)


In VB.Net ciò darebbe qualcosa del tipo:

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

In Autoit (un linguaggio di scripting Windows), sarebbe:

;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

In Delphy 7, sarebbe come:

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;

In alternativa, CoastN propone nei commenti :

Dato che system.ini-filenon viene toccato in una tipica distribuzione di Windows, puoi effettivamente ottenere la data di installazione usando il seguente oneliner:

(PowerShell): (Get-Item "C:\Windows\system.ini").CreationTime

2
Ho scoperto il perché. È perché il mio Windows non è in inglese. :)
Pedro77,

3
Utilizzare systeminfo|find /i "original"solo per filtrare la "Data di installazione originale". Se usi "installa" come stringa otterrai più informazioni di quelle necessarie. Inoltre, se la locale non è inglese, probabilmente non funzionerà. Deve corrispondere alla lingua. Per lo svedese questo sarebbe "ursprungligt" e "ursprüngliches" per il tedesco.
Samir,

1
Per me systeminfo | find / i "originale" è tornato il 30/06/2017 che doveva essere stato un aggiornamento di Windows dato che ho avuto la macchina per circa 4 anni.
Tim

1
Ho appena superato questo, ma con 245 hotfix per impostazione predefinita la finestra CMD non aveva abbastanza linee verticali per visualizzare l'intero output 'systeinfo'. Mi grattò la testa per un minuto. Seguito questo per risolvere il problema: stackoverflow.com/questions/1740876/...
asdf30

1
Dimostra che ho installato il sistema due settimane fa, ma in realtà era un anno o due. Sembra che questa sia una data dell'ultimo aggiornamento di grandi dimensioni.
han

48

Abbiamo abbastanza risposte qui, ma voglio mettere i miei 5 centesimi.

Ho Windows 10 installato 10/30/2015e Creators Update installato 04/14/2017sopra la mia installazione precedente. Tutti i metodi descritti nelle risposte prima della mia mi danno la data dell'installazione di Creators Update.

Data di installazione originale

Sono riuscito a trovare la data di creazione di alcuni file che corrisponde alla data di installazione reale (pulita) del mio Windows 10:

  • nel C:\Windows

Pochi file C: \ Windows

  • nel C:\

Pochi file C: \


7
Meglio allora le altre risposte, ma per quanto riguarda le distribuzioni di immagini?
user3800527

7
Questo è sicuramente più vicino alla risposta corretta; le altre soluzioni non funzionano più con gli aggiornamenti di Windows 10. Tuttavia, nessuno dei 5 file / cartelle elencati qui aveva la data corretta sul mio sistema (alcuni erano più tardi e altri dove in realtà prima). Tuttavia, ho trovato 1 file e 2 cartelle con la data corretta sul mio sistema: C: \ Windows \ hbcikrnl.ini, C: \ Windows \ simboli \ e & C: \ Windows \ CSC \. Quindi, se sai quando era approssimativamente, vai su C: \ Windows \, ​​mostra i file di sistema del sistema, ordina per data e trova qualcosa che sembra giusto.
Matt Jacobi,

Per il mio Windows 10 system.ini, BOOTNXT e bootmgr avevano la data corretta. Win.ini e $ Recycle.Bin avevano date più recenti.
Keith

La data per system.ininon ha senso sui miei computer Windows 7 e 2008, sembra che il timestamp creato dalle origini dell'installazione sia stato copiato al momento dell'installazione. C:\pagefile.sysaveva il timestamp corretto.
Daniel Sokolowski,

38

Aprire il prompt dei comandi, digitare " systeminfo " e premere Invio. Il sistema potrebbe richiedere alcuni minuti per ottenere le informazioni. Nella pagina dei risultati troverai una voce come "Data di installazione del sistema". Questa è la data dell'installazione di Windows. Questo processo funziona in XP, Win7 e anche su win8.


1
Nota che devi essere Amministratore per farlo.
Barrie Reader,

2
Su Windows 7 si ottiene una voce "Data di installazione originale" che per qualche motivo è l'11.1.2002, che chiaramente non è corretta :(
silverchair

18

Come scoprire la data / ora di installazione di Windows 7:

guarda questo ...

  • start> inserisci CMD
  • inserisci systeminfo

questo è tutto; allora puoi vedere tutte le informazioni sulla tua macchina; metodo molto semplice


13

Hai mai voluto scoprire la data di installazione del sistema operativo del tuo PC? Ecco un modo semplice e veloce per scoprire la data e l'ora in cui il sistema operativo del tuo PC è installato (o aggiornato per ultimo).

Apri il prompt dei comandi (start-> esegui -> digita cmd-> premi invio) ed esegui il comando seguente

systeminfo | trova / i "data di installazione"

In pochi secondi vedrai la data di installazione


3
fino a quando non installi un service pack importante, quindi riflette quella data
user3800527

12

In Powershell esegui il comando:

systeminfo | Select-String "Install Date:"

2
Select-String richiede una versione di Windows PowerShell> 3.0 un uso migliorefind /i
sactiw,

5

Il sistema operativo Windows 10 ha ancora un'altra sottochiave del registro, questa nel file hive SYSTEM:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup\

Le informazioni sulla data di installazione qui sono la data / ora di installazione del sistema operativo del computer originale. Ti dice anche quando è iniziato l'aggiornamento, ad es

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

Questo ovviamente non può avvenire al termine dell'aggiornamento, l'utente può scegliere di disattivare invece di riavviare quando richiesto, ecc ...

L'aggiornamento può effettivamente essere completato in un altro giorno e

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

rifletterà la data / ora di inizio dell'aggiornamento.


4

HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ InstallDate e systeminfo.exe generano una data errata .

La definizione del timestamp UNIX è indipendente dal fuso orario. Il timestamp UNIX è definito come il numero di secondi trascorsi dalle 00:00:00 Coordinated Universal Time (UTC), giovedì 1 gennaio 1970 e senza contare i secondi bisestili.

In altre parole, se hai installato il tuo computer a Seattle, WA e ti sei trasferito a New York, NY, HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ InstallDate non rifletterà questo. È la data sbagliata , non memorizza il fuso orario in cui il computer è stato inizialmente installato.

L'effetto di ciò è che se si modifica il fuso orario durante l'esecuzione di questo programma, la data sarà errata. È necessario rieseguire l'eseguibile, in modo che possa tenere conto della modifica del fuso orario.

Ma puoi ottenere le informazioni sul fuso orario dalla classe WMI Win32_Registry .

InstallDate è nel formato UTC (yyyymmddHHMMSS.xxxxxx ± UUU) secondo l' articolo di Microsoft TechNet "Lavorare con date e orari utilizzando WMI", in particolare xxxxxx è millisecondi e ± UUU è un numero di minuti diverso dal tempo medio di Greenwich.

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

La definizione di un timestamp UNIX include un fuso orario, UTC. Se un computer è installato alle 18:00 ora di New York e alle 15:00 ora di Seattle dello stesso giorno, avranno lo stesso timestamp UNIX perché sono stati installati contemporaneamente UTC. Se hai installato il 1 ° aprile 2018 alle 3:00 PM a Seattle e ti sei trasferito a New York e poi ti sei convertito da UTC all'ora locale, verrà visualizzato il 1 ° aprile 2018 alle 18:00 e sarà corretto, perché erano le 6 : 00:00 a New York quando hai installato a Seattle.
jla

Grazie jla, non ero chiaro nel mio post. Quando si cambia il fuso orario al volo mentre il programma è in esecuzione, il cambio del fuso orario non si rifletterà. È necessario riavviare il programma per rendere effettivo il fuso orario. Questo è lo stesso comportamento di Powershell.
Markus

InstallDate restituisce l'ora locale con il fuso orario corrente applicato e anche il fuso orario nel modulo + XXX. Quando il fuso orario cambia, cambia la data di installazione e anche il fuso orario. Se la data di installazione in UTC era 2000-01-01T12: 00: 00Z. InstallDate è 20000101120000.000000 + 000. Imposta il fuso orario su UTC + 5 e diventa 20000101170000.000000 + 300. Quando si utilizza il codice sopra, il fuso orario viene aggiunto due volte. Per ottenere la data UTC, la riga "InstallDate =" deve essere modificata in: InstallDate = new DateTime (anno, mese, data, ora, minuti, secondi, msec, DateTimeKind.Utc) - UTCoffset;
Jesús Diéguez Fernández

3

Trovo che la data di creazione di c: \ pagefile.sys possa essere abbastanza affidabile nella maggior parte dei casi. Può essere facilmente ottenuto usando questo comando (supponendo che Windows sia installato su C :):

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

'/ As' specifica 'file di sistema', altrimenti non verrà trovato. '/ T: c' imposta il campo orario per visualizzare 'creazione'.


1
Ciò darebbe la data di creazione del file di paging, che è totalmente estranea alla data di installazione del sistema operativo stesso. Può essere ricreato per una serie di motivi e persino manomesso se proprio lo desideri. Questo non è un metodo affidabile.
Alejandro,

1
Non è "totalmente indipendente", in quanto viene creato durante l'installazione iniziale. Quindi, a meno che non sia stato ricreato o eliminato intenzionalmente ad un certo punto, nella "maggior parte dei casi" la data di creazione sarà la stessa della data di installazione iniziale, poiché persiste attraverso gli aggiornamenti. Sì, non è affidabile al 100%, ma è semplice e veloce, e immagino preciso in molti più casi. Sicuramente più di molte delle risposte qui.
MoonDogg

Puoi ricreare quel file in qualsiasi momento e se il metodo non garantisce il giusto risultato al 100% di una volta, nessuno può davvero fare affidamento su di esso.
Slava Murygin,

2

Determinare la data di installazione di Windows con WMIC

wmic os get installdate


1
Questo probabilmente legge solo la chiave di registro InstallDate e ha lo stesso problema; cambia sugli aggiornamenti di build.
Anders,


1

Puoi anche controllare la spunta su qualsiasi cartella nell'unità di sistema come "windows" e "file di programma". Fare clic con il tasto destro sulla cartella, fare clic sulle proprietà e controllare nella scheda generale la data in cui è stata creata la cartella.


5
Sebbene valido - questa non è una soluzione di programmazione
Matt Wilko

@Matt Ti dà l'algoritmo in Natural Lenguaje, quindi basta copiarlo in un dispositivo umano! : D
Jonathan

3
Nelle versioni più recenti di Windows, che utilizzano un'installazione basata su immagini ( .WIMfile), la data di creazione è quando Microsoft ha creato l'immagine, non quando il sistema operativo è stato installato su un determinato computer.
ctype.h,

1

In RunCommand scrivi "MSINFO32"e premi invio mostrerà tutte le informazioni relative al sistema


Tutte le informazioni tranne il tempo di installazione. Windows 7 SP1.
Pavel Vlasov,


0

Premi WindowsKey+ Re inviocmd

Nella finestra di comando digitare:

systeminfo | find /i "Original"

(per le versioni precedenti di Windows, digitare "ORIGINALE" in tutte le lettere maiuscole).


Qualcuno sa perché il voto negativo? Ha funzionato per me, forse non è preciso per qualche motivo? Forse spiegare quando si dà un voto
negativo

@russelrillema l'ultimo service pack principale ha la precedenza su questa data.
Don Tomato,

Se hai Windows 10 v1809 vai in Impostazioni> Sistema> Informazioni su. Trova le Specifiche di Windows e lì hai un campo con il nome "Installa su". (Nota: non sono sicuro se funziona su versioni precedenti di Windows)
abdullahjavaid86

0

Puoi semplicemente controllare la data di creazione della cartella di Windows (fai clic destro su di essa e controlla le proprietà) :)


0

Puoi farlo con 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

Prova questo comando 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"

Quasi vero e va notato molto di più poiché tiene conto degli aggiornamenti di build che modificano la chiave in HKLM: \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion ma è necessario combinarli entrambi poiché le chiavi del sistema operativo di origine non sono nemmeno presenti se un sistema non è mai stato effettivamente aggiornato (ancora) e mancherebbe anche la data dell'ultimo aggiornamento della build
Syberdoor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.