經過一番探討如何重置我的電腦或關閉它從C#我發現這個解釋如何做到這一點:如何關閉從C#,Process.Start(「關機」)不能在Windows XP中工作
ManagementBaseObject outParameters = null;
ManagementClass sysOS = new ManagementClass("Win32_OperatingSystem");
sysOS.Get();
// Enables required security privilege.
sysOS.Scope.Options.EnablePrivileges = true;
// Get our in parameters
ManagementBaseObject inParameters = sysOS.GetMethodParameters("Win32Shutdown");
// Pass the flag of 0 = System Shutdown
inParameters["Flags"] = "1"; //shut down.
inParameters["Reserved"] = "0";
foreach (ManagementObject manObj in sysOS.GetInstances())
{
outParameters = manObj.InvokeMethod("Win32Shutdown", inParameters, null);
}
這個工作在Windows 7 ,但不能在Windows XP 我框試了一下上。所以我也讓去一個簡單的解決方案:
Process.Start("shutdown", "/s /t 00");
哀哉,也似乎在我的Windows 7盒工作,但不是我的Windows XP 箱。我只在一臺Windows XP上運行它,但它像命令提示符一樣閃爍,我的程序啓動最小化到系統托盤,然後什麼也沒有發生..所以它想要做一些事情,但最終什麼也沒有發生。 (我確實有代碼故意將我的程序放到sys托盤中,當關閉X被擊中,並且用戶必須故意退出它...)是否有問題呢?我的FormClosing代碼是這樣的:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (!canExit)
{
e.Cancel = true;
this.WindowState = FormWindowState.Minimized;
}
else
{
// Write out the logs.
List<String> logs = LogUtil.getLog(); // mic.getLog();
// Create a writer and open the file
TextWriter tw = new StreamWriter(userAppData + "\\logTMC.txt", true);
// Write a line of text to the file
tw.WriteLine("----- " + DateTime.Now + " ------");
foreach (String log in logs)
{
tw.WriteLine(log);
}
// Close the stream
tw.Close();
}
}
我不知道爲什麼我可以重置,並從C#關機我的電腦在Windows 7 ,但不能在Windows XP ...也許我錯過了什麼?額外的命令?關閉表單關閉時打開的日誌文件的更好方法是什麼?無論如何強制關機或重置的一些方法,我使用的Windows XP框確實有一個SVN服務器作爲正在運行的Windows服務,但我不確定這是否有所作爲。
所以我不確定在哪裏調查我的問題。 Process.Start()
是否有辦法查看退貨或嘗試追蹤以查看導致其不關閉的原因,或者它是一種「隨意忘記」類型的交易?
如果從XP機器上的命令提示符運行「shutdown/s/t 00」,會發生什麼情況? – 2010-09-16 07:48:25
你的問題不應該是'如何關閉代碼'? – 2010-09-16 08:17:51
可能的[如何從C#關閉計算機]的重複(http://stackoverflow.com/questions/102567/how-to-shutdown-the-computer-from-c-sharp) – Joshua 2016-09-05 15:29:15