62

C#を使用してシステムの稼働時間を取得する簡単な方法はありますか?

4

10 に答える 10

59
public TimeSpan UpTime {
    get {
        using (var uptime = new PerformanceCounter("System", "System Up Time")) {
            uptime.NextValue();       //Call this an extra time before reading its value
            return TimeSpan.FromSeconds(uptime.NextValue());
        }
    }
}
于 2009-06-09T19:58:11.387 に答える
29

System.Environment.TickCountは、システムが再起動されてからのミリ秒数を取得します。

ただし、これは Int32 であり、24.9 日後にオーバーフローして負になることに注意してください。MDSN ドキュメントのコメントを参照してください。

于 2009-06-09T19:48:47.523 に答える
7

これを行う最も簡単で適切な方法は、

public static TimeSpan GetUptime()
{
    ManagementObject mo = new ManagementObject(@"\\.\root\cimv2:Win32_OperatingSystem=@");
    DateTime lastBootUp = ManagementDateTimeConverter.ToDateTime(mo["LastBootUpTime"].ToString());
    return DateTime.Now.ToUniversalTime() - lastBootUp.ToUniversalTime();
}
于 2010-08-02T12:20:51.073 に答える
4

シンプルですが、できます:

    static DateTime getLastBootTime(ManagementObject mObject)
    {
        PropertyData pd = mObject.Properties["LastBootUpTime"];
        string name = pd.Name.ToString();
        DateTime lastBoot = parseCmiDateTime(pd.Value.ToString());
        return lastBoot;
    }

    static ManagementObject getServerOSObject(string serverName)
    {
        ManagementObjectSearcher mSearcher = new ManagementObjectSearcher("Select * From Win32_OperatingSystem");
        mSearcher.Scope = new ManagementScope(String.Format(@"\\{0}\root\cimv2", serverName));
        ManagementObjectCollection mObjects = mSearcher.Get();
        if (mObjects.Count != 1) throw new Exception(String.Format("Expected 1 object, returned {0}.", mObjects.Count));
        foreach (ManagementObject m in mObjects)
        {
            //No indexing on collection
            return m;
        }
        throw new Exception("Something went wrong!");
    }
于 2009-06-09T19:47:05.577 に答える
1

質問が古くて解決済みであることは知っていますが、私が考えることができる最も簡単な解決策は、システムが起動してからのミリ秒数を返す Enviroment.TickCount プロパティを使用することです。

System.DateTime SystemStartTime = DateAndTime.Now.AddMilliseconds(-Environment.TickCount);
System.DateTime Uptime = DateAndTime.Now - SystemStartTime;

このソリューションは、受け入れられているアンサーよりもはるかに高速です。

于 2013-07-31T19:32:56.927 に答える