C# 取得WINDOWS 開機多久 [c# get windows start time][C# get date/time a windows service started]
C# 取得WINDOWS 開機多久 [c# get windows start time][C# get date/time a windows service started]
資料來源: https://stackoverflow.com/questions/1928933/c-sharp-get-date-time-a-windows-service-started
Code:
DateTime dt1 = DateTime.Now; DateTime dt2 = ConsumeTime.GetStartTime("explorer"); String StrNowTime = dt1.ToString("yyyy/MM/dd HH:mm:ss"); String StrWindwsStartTime = dt2.ToString("yyyy/MM/dd HH:mm:ss"); TimeSpan ts = dt1 - dt2; String StrWindowsUptime=ts.TotalHours.ToString(); String StrMsg = String.Format("電腦啟動時間 : {0}\n目前時間 : {1}\n經過幾小時 : {2}", StrWindwsStartTime, StrNowTime, StrWindowsUptime); MessageBox.Show(StrMsg); public class ConsumeTime { private static Stopwatch m_stopWatch = new Stopwatch(); private static String m_StrTitle = ""; private static String m_StrStartFileLine = ""; private static String m_StrEndFileLine = ""; public static void Start(String StrInfor) { StackFrame CallStack = new StackFrame(1, true); m_StrStartFileLine = String.Format("File : {0} , Line : {1}", CallStack.GetFileName(), CallStack.GetFileLineNumber()); m_StrTitle = StrInfor; m_stopWatch.Start(); } public static void Stop() { StackFrame CallStack = new StackFrame(1, true); m_stopWatch.Stop(); // Get the elapsed time as a TimeSpan value. TimeSpan ts = m_stopWatch.Elapsed; // Format and display the TimeSpan value. string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",ts.Hours, ts.Minutes, ts.Seconds,ts.Milliseconds / 10); m_StrEndFileLine = String.Format("File : {0} , Line : {1}", CallStack.GetFileName(), CallStack.GetFileLineNumber()); MessageBox.Show(m_StrStartFileLine + " ~ " + m_StrEndFileLine + " consume time: " + elapsedTime, m_StrTitle); } public static DateTime GetStartTime(int processId=0) { Process processes = Process.GetProcessById(processId); // ----------------------------- DateTime retVal = DateTime.Now; retVal = processes.StartTime; return retVal; } public static DateTime GetStartTime(string processName) { Process[] processes = Process.GetProcessesByName(processName); if (processes.Length == 0) throw new ApplicationException(string.Format( "Process {0} is not running.", processName)); // ----------------------------- DateTime retVal = DateTime.Now; foreach (Process p in processes) if (p.StartTime < retVal) retVal = p.StartTime; return retVal; } }
PS.
01.explorer.exe 是 WINDOWS的桌面程式,經過測試 抓取他的啟動時間作為開機最為接近
02.雖然有人建議用『net statistics workstation』或 『systeminfo』 但是我在公司NB都會有很大的誤差(2022/07/13測試會出現2022/07/08的日期)