Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menghalang Tetingkap Prompt Perintah daripada Muncul Apabila Menggunakan `exec.Command()` dalam Go?
Dalam Go, fungsi exec.Command() boleh digunakan untuk melaksanakan arahan luaran. Walau bagaimanapun, secara lalai, fungsi ini memaparkan tetingkap gesaan arahan semasa arahan sedang dijalankan. Untuk mengelakkan tetingkap ini daripada muncul, anda boleh menetapkan medan HideWindow syscall.SysProcAttr kepada benar.
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. }
Walau bagaimanapun, kaedah ini mungkin tidak selalu berfungsi, terutamanya apabila digunakan dalam Windows. Walaupun dengan HideWindow ditetapkan kepada benar, tetingkap arahan mungkin masih muncul secara ringkas.
Penyelesaian yang lebih dipercayai ialah menggunakan syscall untuk mencipta proses baharu dengan bendera SW_HIDE. Ini memastikan proses baharu berjalan tanpa tetingkap yang kelihatan.
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) }
Dengan kaedah ini, tetingkap gesaan arahan tidak akan muncul sama sekali apabila exec.Command() dipanggil.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Tetingkap Prompt Perintah daripada Muncul Apabila Menggunakan `exec.Command()` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!