在 Go 中,可以使用 exec.Command() 函數來執行外部命令。但是,預設情況下,此函數在命令運行時顯示命令提示字元視窗。若要防止出現此窗口,可以將 syscall.SysProcAttr 的 HideWindow 欄位設為 true。
package main import ( "log" "os" "syscall" "github.com/pkg/exec" ) func main() { process := exec.Command("cmd", "/c", "dir") process.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} err := process.Start() if err != nil { log.Print(err) } process.Wait() // Wait for the command to finish before exiting. }
但是,此方法可能並不總是有效,尤其是在 Windows 中使用時。即使將 HideWindow 設為 true,命令視窗仍可能會短暫顯示。
更可靠的解決方案是使用 syscall 來建立具有 SW_HIDE 標誌的新進程。這可以確保新進程在沒有可見視窗的情況下運行。
package main import ( "log" "os" "os/exec" "syscall" ) func main() { cmdPath, _ := exec.LookPath("cmd") si := syscall.StartupInfo{ Flags: syscall.STARTF_USESHOWWINDOW, CreationFlags: 0x00000008, // SW_HIDE } pi := syscall.ProcessInformation{} _, _, err := syscall.CreateProcess(cmdPath, syscall.Syscall0(uintptr(len(cmdPath))), nil, nil, false, syscall.CREATE_NEW_CONSOLE, 0, nil, &si, &pi) if err != nil { log.Fatal(err) } syscall.CloseHandle(pi.Thread) syscall.CloseHandle(pi.Process) os.Exit(0) }
使用此方法,在呼叫 exec.Command() 時根本不會出現命令提示字元視窗。
以上是在 Go 中使用 exec.Command() 時如何防止出現命令提示字元視窗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!