注册表中的原始安装日期
本文关键字:安装 日期 原始 注册表 | 更新日期: 2023-09-27 18:25:17
几年前,我一直试图修改在这里找到的一个代码,从注册表中提取原始操作系统安装日期,并将其显示在应用程序中的.txt字段中。这是我的代码:
public static DateTime GetWindowsInstallationDateTime(string scomputer)
{
Microsoft.Win32.RegistryKey key = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, scomputer);
key = key.OpenSubKey(@"SOFTWARE'Microsoft'Windows NT'CurrentVersion", false);
if (key != null)
{
DateTime startDate = new DateTime(1970, 1, 1, 0, 0, 0);
object objValue = key.GetValue("InstallDate");
string stringValue = objValue.ToString();
Int64 regVal = Convert.ToInt64(stringValue);
DateTime installDate = startDate.AddSeconds(regVal);
return installDate;
}
return DateTime.MinValue;
}
然后我使用以下变量和赋值将信息调用到文本字段中:
string scomputer = System.Environment.MachineName;
osOriginalInstall.text = GetWindowsInstallationDateTime(scomputer).ToString();
不幸的是,我得到的唯一返回结果是1970年1月1日凌晨12:00:00。我确认我确实可以访问注册表中的D-WORD信息,但在我们的环境中尝试访问注册表时,UAC确实让我使用ADMIN帐户进行身份验证。我尝试以ADMIN的身份启动我的应用程序,但仍然得到了相同的结果。
如有任何意见,我们将不胜感激!
尝试更改
var key = RegistryKey.OpenRemoteBaseKey(
Microsoft.Win32.RegistryHive.LocalMachine,
scomputer);
至
var key = RegistryKey.OpenRemoteBaseKey(
Microsoft.Win32.RegistryHive.LocalMachine,
scomputer,
RegistryView.Registry64);
我认为这个值只能从64位配置单元中获得。成功测试(本地)使用:
var key = Microsoft.Win32.RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
key = key.OpenSubKey(@"SOFTWARE'Microsoft'Windows NT'CurrentVersion", false);
if (key != null)
{
DateTime startDate = new DateTime(1970, 1, 1, 0, 0, 0);
object objValue = key.GetValue("InstallDate");
string stringValue = objValue.ToString();
Int64 regVal = Convert.ToInt64(stringValue);
DateTime installDate = startDate.AddSeconds(regVal);
}