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 中国語 Web サイトの他の関連記事を参照してください。