如何找到Windows的安装时间和日期?


134

这听起来可能是一个疯狂的问题,但是如何找到Windows的安装时间和日期(希望通过API /注册表项)?

到目前为止,我能想到的最好的办法是查看C:\ Windows中的各种文件,然后尝试猜测...但这并不是一个很好的解决方案。

Answers:


90

regedit.exe转到:

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

以自1970年1月1日以来的秒数表示。(注意:对于Windows 10,该日期将是最后一次更新功能的安装日期,而不是原始安装日期。)

要将该数字转换为可读的日期/时间,只需将十进制值粘贴到此Unix时间转换在线工具的 “ UNIX TimeStamp:”字段中。


3
太好了,您是否曾在某个特殊的地方获得过这些信息,或者只是知道吗?
免费角马

5
效果很好,除非Windows是使用磁盘映像安装的。有没有一种方法可以检查用户个人资料的创建以解决此问题?
2013年

8
不工作体现了最新的服务包/更新安装日期(EA当前版本,而不是原始版本的安装时间。
user3800527

2
我认为它给出的是上次Windows更新日期,而不是系统安装日期。
Tharindu Sathischandra

我的Windows 7安装未在该注册位置SP1中显示InstallDate。
user734028

175

对于“ 代码挑战 ” 而言,另一个容易理解的问题是:这里有一些源代码可执行文件可以回答该问题,但它们并不完整。
您是否会找到任何人都可以在他/她的计算机上执行的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;

作为替代方案,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“原始版”返回2017年6月30日,这必须是Windows更新,因为我拥有这台机器已有大约4年的时间。
蒂姆(Tim)

1
我只是经历了这个,但是默认情况下有245个修补程序,CMD窗口没有足够的垂直线来显示整个'systeinfo'输出。挠了一下我的头。遵循这一解决它:stackoverflow.com/questions/1740876/...
asdf30

1
它表明我在两周前安装了该系统,但实际上是一两年。看来这是上一次大规模升级的日期。
汉斯

48

我们在这里有足够的答案,但我想投入5美分。

我在先前的安装之上安装了Windows 10,10/30/2015并安装了Creators Update 04/14/2017。我的答案中描述的所有方法都为我提供了创建者更新的安装日期。

原始安装日期

我设法找到了几个与Windows 10的实际(干净)安装日期相匹配的文件创建日期:

  • C:\Windows

很少C:\ Windows文件

  • C:\

很少C:\文件


7
比其他答案更好,但是映像部署如何?
user3800527 '18

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有较新的日期。
基思(Keith)

system.ini在我的Windows 7和2008计算机上,这个日期毫无意义,似乎是在安装时复制了从安装源创建的时间戳。C:\pagefile.sys具有正确的时间戳。
Daniel Sokolowski

38

打开命令提示符,键入“ systeminfo ”,然后按Enter。您的系统可能需要几分钟来获取信息。在结果页面中,您将找到一个条目“系统安装日期”。那是Windows安装的日期。此过程适用于XP,Win7以及win8。


1
请注意,您必须是管理员才能执行此操作。
Barrie Reader

2
在Windows 7上,这会给出“原始安装日期”条目,由于某些原因,该条目是11.1.2002,这显然是不正确的:(
silverchair 2013年

18

如何找出Windows 7安装日期/时间:

看看这个...

  • 开始>输入CMD
  • 输入systeminfo

而已; 然后,您可以查看有关计算机的所有信息;非常简单的方法


13

是否曾经想知道您PC的操作系统安装日期?这是找出您的PC操作系统(或上次升级)安装日期和时间的快速简便方法。

打开命令提示符(开始->运行->输入cmd->按下Enter)并运行以下命令

systeminfo | 查找/ i“安装日期”

几秒钟后,您将看到安装日期


3
直到您安装了主要服务包,然后它才反映出该日期
user3800527 '18

12

在Powershell中运行命令:

systeminfo | Select-String "Install Date:"

2
选择字符串要求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时间戳定义为自1970年1月1日(星期四)协调世界时(UTC)00:00:00起经过的秒数,不计leap秒。

换句话说,如果您在华盛顿州西雅图市安装了计算机并将其移至纽约,则HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ InstallDate不会反映此情况。这是错误的日期,它不会存储在电脑的最初安装时区。

这样做的效果是,如果在运行此程序时更改时区,则日期将是错误的。您必须重新运行该可执行文件,以使其能够解决时区变化。

但是您可以从WMI Win32_Registry类获取时区信息。

根据Microsoft TechNet 文章 “使用WMI处理日期和时间”,InstallDate采用UTC格式(yyyymmddHHMMSS.xxxxxx±UUU),其中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。如果在同一天纽约时间下午6:00和西雅图时间下午3:00安装计算机,则它们将具有相同的UNIX时间戳,因为它们是在同一时间UTC安装的。如果您在2018年4月1日下午3:00安装在西雅图,然后移至纽约,然后从UTC转换为您的当地时间,则它将说是2018年4月1日下午6:00,因为它是6在西雅图安装时,在纽约:00 PM。
jla

谢谢jla,我在帖子中不清楚。在程序运行时即时更改时区时,将不会反映时区更改。您必须重新启动程序才能使时区生效。这与Powershell行为相同。
马库斯

InstallDate返回应用了当前时区的本地时间以及+ XXX格式的时区。时区更改时,安装日期也会更改,时区也会更改。如果UTC的安装日期为2000-01-01T12:00:00Z。InstallDate为20000101120000.000000 + 000。将时区设置为UTC + 5,它变为20000101170000.000000 + 300。使用上面的代码时,时区被添加两次。要获取UTC日期,应将“ InstallDate =”行更改为:InstallDate = new DateTime(年,月,日,时,分,秒,毫秒,DateTimeKind.Utc)-UTCoffset;
赫苏斯Diéguez费尔南德斯

3

我发现c:\ pagefile.sys的创建日期在大多数情况下可以非常可靠。可以使用以下命令轻松获得它(假设Windows安装在C:上):

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

“ / as”指定“系统文件”,否则将找不到。“ / t:c”将时间字段设置为显示“创建”。


1
这将给出页面文件的创建日期,这与操作系统本身的安装日期完全无关。出于多种原因可以重新创建它,甚至在您确实需要时也可以对其进行篡改。那不是一个可靠的方法。
亚历杭德罗

1
它不是“完全无关”的,因为它是在初始安装过程中创建的。因此,除非在某些时候有意重新创建或删除了它,否则在大多数情况下,创建日期将与初始安装日期相同,因为它会通过升级持续存在。是的,它不是100%可靠的,但它又快速又容易,我想在很多情况下它都是准确的。绝对比这里的许多答案要多。
MoonDogg

您可以随时重新创建该文件,如果方法不能保证100%的时间获得正确的结果,则没有人可以真正依赖它。
Slava Murygin

2

使用WMIC确定Windows安装日期

wmic os获取安装日期


1
这可能只是读取InstallDate注册表项,并且有相同的问题;它会在生成更新时更改。
安德斯(Anders)


1

您还可以检查系统驱动器中的任何文件夹,例如“ windows”和“ program files”。右键单击该文件夹,单击属性,然后在常规选项卡下检查创建文件夹的日期。


5
虽然有效的-这不是一个编程解决方案
马特Wilko

@Matt他为您提供Natural Lenguaje中的算法,因此只需在人为设备中编译即可!:D
乔纳森(Jonathan)

3
在使用基于映像安装的Windows的较新版本中,.WIM创建日期是Microsoft创建映像的日期,而不是操作系统安装在特定计算机上的日期。
ctype.h 2012年



0

WindowsKey+ R并输入cmd

在命令窗口中,输入:

systeminfo | find /i "Original"

(对于旧版Windows,请在所有大写字母中键入“ ORIGINAL”)。


有人知道为什么要投反对票吗?为我工作,也许由于某些原因可能不准确?也许在向下投票时解释一下
russelrillema

@russelrillema,最后一个主要服务包将覆盖此日期。
唐·番茄

如果您使用的是Windows 10 v1809,请转到“设置”>“系统”>“关于”。查找Windows规范,然后在其中找到一个名称为“ Install on”的字段。(注意:不确定它是否适用于旧版本的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

试试这个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"

几乎是正确的,应该注意的是,因为这考虑到了构建更新,这些更新会更改HKLM:\ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion中的密钥,但是由于系统中甚至没有源OS密钥,因此两者都需要结合使用从未进行过实际更新(至今),并且也缺少上次构建更新的日期
Syberdoor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.