Reputation: 3
With the C# Core 3.1 WinForms application, the first installation date of the operating system cannot be read through regedit. It gives different results than the date given by "SystemInfo" command with CMD.
CMD "System Info":
Original Install Date: 11/26/2022, 1:08:26 PM
C# Read a "Regedit InstallDate(DWord)":
Date: "1.01.1601 00:02:46"
RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, computerName);
key = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", false);
if (key != null)
{
DateTime installDate =
DateTime.FromFileTimeUtc(
Convert.ToInt64(
key.GetValue("InstallDate").ToString()));
return installDate;
}
return DateTime.MinValue;
Upvotes: 0
Views: 188
Reputation: 1140
@KlausGutter's answer is spot on, the value in the registry is a Unix time. If you want to convert it to a DateTime
rather than a DateTimeOffset
, then you could use something like
var installDate = DateTime.UnixEpoch.AddSeconds(regValue)
Upvotes: 1
Reputation: 11977
The value in InstallDate
is not a FILETIME value, but a Unix Time (seconds since 1970-01-01).
You can use
var installDate = DateTimeOffset.FromUnixTimeSeconds(regValue);
to convert to a DateTimeOffset
.
For other conversion methods see How do you convert epoch time in C#?
Upvotes: 2