3
A
回答
7
syscall
包中沒有「Shutdown OS」功能,因爲沒有爲所有操作系統提供的通用接口。
注:有一個syscall.Shutdown()
函數,但是這是shutdown a socket,而不是關閉操作系統。
最簡單的方法就是使用os/exec
包(例如,
if err := exec.Command("cmd", "/C", "shutdown", "/s").Run(); err != nil {
fmt.Println("Failed to initiate shutdown:", err)
}
上述命令啓動關閉序列,通常需要1分鐘至真正關閉系統(和有空間與shutdown /a
中止它)。您可以爲shutdown
命令提供不同的參數,不等待1分鐘,但立即執行:shutdown /t 0 /s
(執行shutdown /?
以獲取所有選項的列表)。
還有一個Windows API調用來關閉系統:ExitWindowsEx()
。它有2個參數,第一個是定義關機類型的標誌(0x08
表示Shuts down the system and turns off the power.
),第二個是提供關機的原因。從去調用該方法,可以是這樣做的:
user32 := syscall.MustLoadDLL("user32")
defer user32.Release()
exitwin := user32.MustFindProc("ExitWindowsEx")
r1, _, err := exitwin.Call(0x08, 0)
if r1 != 1 {
fmt.Println("Failed to initiate shutdown:", err)
}
但是要知道,你需要SE_SHUTDOWN_NAME
權限調用ExitWindowsEx()
,否則你得到這樣的錯誤信息:
Failed to initiate shutdown: A required privilege is not held by the client.
相關問題
- 1. 當窗口關閉時運行代碼
- 2. 使用子窗口關閉父窗口。
- 3. 在VIM中關閉Python代碼窗口後自動關閉pylint窗口
- 4. 無關閉窗口的關閉窗口
- 5. 使用wmctrl關閉窗口
- 6. 使用pyatspi關閉窗口
- 7. 使用window.close關閉窗口
- 8. 關閉窗口
- 9. 用Greasemonkey關閉窗口
- 10. JS關閉窗口
- 11. OAuth2窗口關閉
- 12. 關閉jsp窗口
- 13. 關閉GTK窗口
- 14. javafx關閉窗口
- 15. 關閉WPF窗口
- 16. 塊窗口關閉
- 17. VBA - 關閉窗口
- 18. 使用onclick事件關閉JavaScript窗口
- 19. 使用cmd關閉當前窗口?
- 20. 如何使用WM_CLOSE關閉子窗口?
- 21. 使用MATLAB關閉Powerpoint窗口
- 22. 使用applescript關閉多個Safari窗口
- 23. 使用javascript關閉彈出窗口
- 24. 使用shdocvw關閉彈出窗口?
- 25. 如何使用jQuery關閉窗口
- 26. 關閉在第一個窗口的代碼中生成的第二個窗口
- 27. 在javascript中關閉父窗口時如何關閉子窗口?
- 28. 當父窗口在Jquery中關閉時關閉子窗口
- 29. 一個窗口關閉時關閉幾個窗口
- 30. 如何防止父窗口關閉之前關閉子窗口
https://golang.org/pkg/syscall/#Shutdown? –
@u_mulder我不這麼認爲。 ['syscall.Shutdown()'](https://golang.org/pkg/syscall/#Shutdown)是[關閉套接字](https://msdn.microsoft.com/en-us/library/windows /desktop/ms740481(v=vs.85).aspx),而不是操作系統。 – icza