ホームページ > バックエンド開発 > Golang > Go で `exec.Command()` を使用するときにコマンド プロンプト ウィンドウが表示されないようにするにはどうすればよいですか?

Go で `exec.Command()` を使用するときにコマンド プロンプト ウィンドウが表示されないようにするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-09 02:00:12
オリジナル
633 人が閲覧しました

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

Go で Exec を使用してコマンド プロンプト ウィンドウを非表示にする

Go では、exec.Command() 関数を使用して外部コマンドを実行できます。ただし、デフォルトでは、この関数はコマンドの実行中にコマンド プロンプト ウィンドウを表示します。このウィンドウが表示されないようにするには、syscall.SysProcAttr の HideWindow フィールドを true に設定します。

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.
}
ログイン後にコピー

ただし、この方法は、特に Windows で使用する場合、常に機能するとは限りません。 HideWindow を true に設定しても、コマンド ウィンドウが一時的に表示されることがあります。

代替解決策

より信頼性の高い解決策は、syscall を使用して SW_HIDE フラグを指定して新しいプロセスを作成することです。これにより、新しいプロセスがウィンドウを表示せずに実行されるようになります。

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)
}
ログイン後にコピー

このメソッドを使用すると、exec.Command() が呼び出されたときにコマンド プロンプト ウィンドウがまったく表示されなくなります。

以上がGo で `exec.Command()` を使用するときにコマンド プロンプト ウィンドウが表示されないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート