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. 使用子窗口關閉父窗口。
- 4. 在VIM中關閉Python代碼窗口後自動關閉pylint窗口
- 5. 無關閉窗口的關閉窗口
- 6. 使用wmctrl關閉窗口
- 7. 使用pyatspi關閉窗口
- 8. 返回值和僅使用ASP.NET代碼的關閉窗口
- 9. 關閉窗口
- 10. 用Greasemonkey關閉窗口
- 11. 用Python關閉Plink窗口
- 12. OAuth2窗口關閉
- 13. JS關閉窗口
- 14. javafx關閉窗口
- 15. 關閉IFRAME窗口
- 16. 關閉WPF窗口
- 17. VBA - 關閉窗口
- 18. EXTJS關閉窗口
- 19. 塊窗口關閉
- 20. 關閉jsp窗口
- 21. GLFW窗口關閉
- 22. 關閉JFrame窗口?
- 23. FLTK關閉窗口
- 24. 關閉GTK窗口
- 25. Wxpython關閉窗口
- 26. 匿名代表關閉一個窗口
- 27. 如何使用jQuery關閉窗口
- 28. 識別窗口關閉使用javascript
- 29. 使用tkinter的不可關閉窗口
- 30. 使用cmd關閉當前窗口?
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