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
Freigeben: 2024-12-09 02:00:12
Original
644 Leute haben es durchsucht

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.
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage