Heim >Backend-Entwicklung >Golang >Wie kann ich verhindern, dass das Eingabeaufforderungsfenster angezeigt wird, wenn ich „exec.Command()' in Go verwende?

Wie kann ich verhindern, dass das Eingabeaufforderungsfenster angezeigt wird, wenn ich „exec.Command()' in Go verwende?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-09 02:00:12625Durchsuche

How Can I Prevent the Command Prompt Window from Appearing When Using `exec.Command()` in Go?

Eingabeaufforderungsfenster mit Exec in Go ausblenden

In Go kann die Funktion exec.Command() zum Ausführen externer Befehle verwendet werden. Standardmäßig zeigt diese Funktion jedoch das Eingabeaufforderungsfenster an, während der Befehl ausgeführt wird. Um zu verhindern, dass dieses Fenster angezeigt wird, können Sie das HideWindow-Feld von syscall.SysProcAttr auf true setzen.

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.
}

Diese Methode funktioniert jedoch möglicherweise nicht immer, insbesondere wenn sie unter Windows verwendet wird. Selbst wenn HideWindow auf „true“ gesetzt ist, wird das Befehlsfenster möglicherweise noch kurz angezeigt.

Alternative Lösung

Eine zuverlässigere Lösung besteht darin, Syscall zu verwenden, um einen neuen Prozess mit dem SW_HIDE-Flag zu erstellen. Dadurch wird sichergestellt, dass der neue Prozess ohne sichtbares Fenster ausgeführt wird.

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)
}

Mit dieser Methode wird das Eingabeaufforderungsfenster überhaupt nicht angezeigt, wenn exec.Command() aufgerufen wird.

Das obige ist der detaillierte Inhalt vonWie kann ich verhindern, dass das Eingabeaufforderungsfenster angezeigt wird, wenn ich „exec.Command()' in Go verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn