Heim >Backend-Entwicklung >Golang >Wie drucke ich die Befehlszeilenausgabe von Silent Go-Anwendungen, die mit „-ldflags -H=windowsgui' kompiliert wurden?

Wie drucke ich die Befehlszeilenausgabe von Silent Go-Anwendungen, die mit „-ldflags -H=windowsgui' kompiliert wurden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-27 18:27:14698Durchsuche

How to Print Command Line Output from Silent Go Applications Compiled with `-ldflags -H=windowsgui`?

Silent Go-Anwendungen und Befehlszeilenausgabe mit Windows-GUI-Flag

In Go-Anwendungen deaktiviert das Kompilieren mit -ldflags -H=windowsgui den Konsolenzugriff , wodurch verhindert wird, dass die Ausgabe im Befehlsfenster gedruckt wird. Um dieses Problem zu beheben und Versionsinformationen an der Eingabeaufforderung auszugeben, können die folgenden Schritte unternommen werden:

Das zugrunde liegende Problem besteht darin, dass der PE-Header der ausführbaren Datei die Subsystemvariable „Windows“ enthält, die den Prozess von jeder Konsole trennt . Zum Drucken an der Eingabeaufforderung ist eine explizite Konsolenanbindung erforderlich.

Das Syscall-Paket von Go stellt die Funktion „AttachConsole“ bereit, um dies zu erreichen. Der folgende Code demonstriert seine Verwendung:

package main

import (
    "fmt"
    "syscall"
)

const (
    ATTACH_PARENT_PROCESS = ^uint32(0) // (DWORD)-1
)

var (
    modkernel32 = syscall.NewLazyDLL("kernel32.dll")

    procAttachConsole = modkernel32.NewProc("AttachConsole")
)

func AttachConsole(dwParentProcess uint32) (ok bool) {
    r0, _, _ := syscall.Syscall(procAttachConsole.Addr(), 1, uintptr(dwParentProcess), 0, 0)
    ok = bool(r0 != 0)
    return
}

func main() {
    ok := AttachConsole(ATTACH_PARENT_PROCESS)
    if ok {
        fmt.Println("Okay, attached")
    }
}

Nach dem Anhängen an die Konsole des übergeordneten Prozesses kann das Programm wie gewohnt mit fmt.Println an der Eingabeaufforderung drucken.

Zusätzlich zur Vollständigkeit Lösung: Erwägen Sie die Behandlung von Fehlerszenarien, indem Sie entweder ein neues Konsolenfenster mit AllocConsole() erstellen oder einen GUI-Dialog anzeigen, um den Benutzer über das Problem zu informieren.

Das obige ist der detaillierte Inhalt vonWie drucke ich die Befehlszeilenausgabe von Silent Go-Anwendungen, die mit „-ldflags -H=windowsgui' kompiliert wurden?. 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