C# 再起動からの時間なの?Windowsでシステム起動時間を取得する方法

イラスト C#

再起動からの時間?

Windows OS起動時間を取得しようと思い、C#でコードを書いてみました。

System.Environment.TickCount で取得する方法

を試してみたのですが、私の感覚でとコンピュータをシャットダウンし、次にコンピュータの電源を入れてからの時間を取得する予定でしたが、

        static void Main(string[] args)
        {
            int tickCount = System.Environment.TickCount & int.MaxValue;
            double StartedTime = tickCount / 1000 / 60; //分 
            Console.WriteLine(tickCount + "\n");
            Console.WriteLine(StartedTime);


            int tc = Environment.TickCount;              // ミリ秒単位で経過時間を取得

            TimeSpan ts = new TimeSpan(0, 0, 0, 0, tc);  // 値を TimeSpan 型へ変換する

            Console.WriteLine("経過時間 " + ts.Days + "日" + ts.Hours + "時間" + ts.Minutes + "分" + ts.Seconds + "秒");
            Console.ReadKey();
        }

妙に長い時間が返ってきます。

161904640

2698
経過時間 1日20時間58分24秒

おかしいなぁと思い、コマンドプロンプトより

systeminfo を実行しても同じ

システム起動時間:       2023/12/25, 13:05:19

いやいや、教12/26さっき起動したばっかりなんだけど。と思ったら、これコンピュータを再起動した時の時間です。

            // システム起動時間を取得
            var uptime = new PerformanceCounter("System", "System Up Time");
            uptime.NextValue(); // 初回は0を返すため、1回呼び出す必要がある
            var uptimeSpan = TimeSpan.FromSeconds(uptime.NextValue());
            Console.WriteLine("WindowsOSが起動してからの時間: " + uptimeSpan.Days + "日" + uptimeSpan.Hours + "時間" + uptimeSpan.Minutes + "分" + uptimeSpan.Seconds + "秒");

PerformanceCounter でも同じでした。

WindowsOSが起動してからの時間: 1日21時間29分23秒

全部同じところを見てるんですね。

原因 高速スタートアップ

高速スタートアップ(Fast Startup)はWindows 8, 8.1から出てきた機能で、電源管理(ACPI)と関係しており、ハイバネーションしつつ、極小の電力で待機状態で推移しているためです。

コンピュータのシャットダウンでは、既に起動している状態・待機している状態と同じで、日時がリセットされないんですね。

Windowsイベントログから取得するしかなさそうです。

参考

コメント

タイトルとURLをコピーしました