Windows GUI フラグを使用したサイレント Go アプリケーションとコマンド ライン出力
Go アプリケーションで、-ldflags -H=windowsgui を指定してコンパイルすると、コンソール アクセスが無効になります、出力がコマンド ウィンドウに印刷されなくなります。この問題を解決し、バージョン情報をコマンド プロンプトに出力するには、次の手順を実行できます。
根本的な問題は、実行可能ファイルの PE ヘッダーに「Windows」サブシステム変数が含まれていることです。これにより、プロセスとコンソールの関連付けが解除されます。 。コマンド プロンプトに出力するには、明示的なコンソール接続が必要です。
Go の syscall パッケージは、これを実現するための AttachConsole 関数を提供します。以下のコードは、その使用法を示しています。
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") } }
親プロセスのコンソールにアタッチした後、プログラムは通常どおり fmt.Println を使用してコマンド プロンプトに出力できます。
さらに、完全な解決策として、AllocConsole() を使用して新しいコンソール ウィンドウを作成するか、GUI ダイアログを表示してユーザーに問題について通知することにより、障害シナリオを処理することを検討してください。
以上が「-ldflags -H=windowsgui」でコンパイルされた Silent Go アプリケーションからコマンド ライン出力を印刷する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。