中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

c#.netでWMIを利用してPCの起動時間を取得する

開発環境:visual studio2015
開発言語:c#.net

現在動作しているPCが本当に想定された時間に起動したものなのか?
これを知りたい時がありました。
理由としては、もしかして想定外の再起動処理をしてないか?
または、停電によるインフラ側の不具合があるのではないか?
等です。
もちろん、windowsLogを見ればいっぱつなのですが
その操作が容易に出来ない環境下では現実的ではありません。

アプリケーションで取得出来たらと考えて【WMI】を利用しようということになりました。
【WMI】とは【Windows Management Instrumentation】の略で
簡単に言うとシステムに関する情報が取得出来たり、操作出来たり・・・
というものです。

では早速やってみます。

まずはvisualstudioから任意のプロジェクト作成します。
作成したら、参照の追加で【system.management.dll 】を追加します。

【ソリューションエクスプローラー】の【参照】を右クリックし
【参照の追加】をクリック

参照マネージャーから【System.Management】を選択して【OK】をクリック

f:id:tsu--kun:20190704181924p:plain

これで【system.management.dll 】が追加されます。

追加したら、下記のコードを記述します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace getFromWMI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_OperatingSystem");
            System.Management.ManagementObjectCollection moc = mc.GetInstances();
            foreach (System.Management.ManagementObject mo in moc)
            {
                Console.WriteLine(mo["LastBootUpTime"]);
                mo.Dispose();
            }
            moc.Dispose();
            mc.Dispose();
        }
    }
}

結果は下記のとおり

【20190704085037.351049+540】と出力されました。
なのでPCが起動した時間は
【2019年7月4日8時50分37秒351049ms】
となります。
【+540】はグリニッジ標準時から540分の差があるよという意味です。