在 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中文网其他相关文章!