これはちょっと変わった質問のように聞こえるかもしれませんが、Windowsのインストール日時を(できればAPI /レジストリキーを使用して)見つける方法はありますか?
これまでに思いついた最善の方法は、C:\ Windowsのさまざまなファイルを見て、推測しようとすることです...しかし、それは正確な解決策ではありません。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate
1970年1月1日からの秒数で示されます。
その数値を読み取り可能な日付/時刻に変換するには、この nix Time Conversion online tool のフィールド「UNIX TimeStamp:」に10進値を貼り付けるだけです。
'code-challenge'の省略可能な別の質問:ここに、問題に答えるためのいくつかのソースコード実行可能ファイルがありますが、完全ではありません。
誰でも自分のコンピューターで実行できるvbスクリプトを見つけて、期待どおりの結果が得られますか?
systeminfo|find /i "original"
あなたに実際の日付を与えるでしょう...秒数ではありません;)
As Sammycomments 、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 Management Instrumentation )
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;
コマンドプロンプトを開き、「systeminfo」と入力してEnterキーを押します。システムが情報を取得するのに数分かかる場合があります。結果ページには、「システムのインストール日」というエントリがあります。これがWindowsのインストール日です。このプロセスはXP、Win7およびwin8で動作します。
Windows 7のインストール日時を確認する方法:
ただこれを見て...
それでおしまい;次に、マシンに関するすべての情報を表示できます。非常に簡単な方法
PCのオペレーティングシステムのインストール日を知りたいと思ったことはありませんか? PCオペレーティングシステムがインストールされた(または最後にアップグレードされた)日付と時刻を見つけるための迅速で簡単な方法を次に示します。
コマンドプロンプトを開き(start-> run-> type cmd-> hit enter)、次のコマンドを実行します
systeminfo |/i "インストール日"を見つけます
数秒でインストール日が表示されます
Powershellで次のコマンドを実行します。
systeminfo | Select-String "Install Date:"
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDateおよびsysteminfo.exeは間違った日付を生成します。
UNIXタイムスタンプの definition はタイムゾーンに依存しません。 UNIXタイムスタンプは、1970年1月1日木曜日の協定世界時(UTC)00:00:00から経過した秒数として定義され、うるう秒はカウントされません。
つまり、ワシントン州シアトルにコンピューターをインストールしてニューヨークに移動した場合、HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDateはこれを反映しません。それは間違った日付であり、コンピューターが最初にインストールされたタイムゾーンを保存しません。
この効果は、このプログラムの実行中にタイムゾーンを変更すると、日付が間違っていることになります。タイムゾーンの変更に対応するために、実行可能ファイルを再実行する必要があります。
ただし、WMI Win32_Registry クラスからタイムゾーン情報を取得できます。
InstallDateは、Microsoft TechNetによるUTC形式(yyyymmddHHMMSS.xxxxxx±UUU)です 記事 「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);
}
Windows 10 OSには、さらに別のレジストリサブキーがあります。これはSYSTEM Hiveファイルにあります。
> "\Setup\Source OS."
ここでのインストール日情報は、元のコンピューターOSのインストール日時です。また、更新がいつ開始されたかを示します。
"\Setup\Source OS (Updated on xxxxxx)."
もちろん、これは更新が終了したときではなく、ユーザーはプロンプトが表示されたときに再起動する代わりにオフにすることもできます。
更新は実際には別の日に完了することができます。
> "\Setup\Source OS (Updated on xxxxxx)"
更新を開始した日付/時刻を反映します。
ほとんどの場合、c:\ pagefile.sysの作成日はかなり信頼できることがわかります。次のコマンドを使用して簡単に取得できます(WindowsがC:にインストールされていると仮定):
dir /as /t:c c:\pagefile.sys
「/ as」は「システムファイル」を指定します。指定しない場合、見つかりません。 「/ t:c」は、「作成」を表示する時間フィールドを設定します。
WMICを使用してWindowsのインストール日を決定する
wmic os get installdate
RunCommandで"MSINFO32"
と入力してEnterキーを押すと、システムに関連するすべての情報が表示されます
Speccyを使用します。 [オペレーティングシステム]セクションにインストール日が表示されます。 http://www.piriform.com/speccy
「windows」や「program files」など、システムドライブ内の任意のフォルダーをチェックすることもできます。フォルダを右クリックし、プロパティをクリックして、一般タブの下でフォルダが作成された日付を確認します。
Windowsフォルダの作成日を確認するだけです(右クリックしてプロパティを確認してください):)
押す WindowsKey + R cmd
と入力します
コマンドウィンドウで次のように入力します。
systeminfo | find /i "Original"
(古いバージョンのウィンドウの場合、すべて大文字で「オリジナル」と入力します。)