GoLang goWSL 在命令运行时隐藏 CMD 窗口

问题描述 投票:0回答:1

我正在 Windows 上开发 GoLang UI 应用程序,它使用很棒的 Fyne 和 GoWSL (https://github.com/ubuntu/GoWSL) 包从我的 UI 运行 WSL 命令。

我有一个调用 WSL 的函数。它工作得很好,但是每次我运行命令时它都会打开一个丑陋的 CMD 窗口。理想情况下,我希望在后台运行这些 WSL 命令,而不让用户看到它们。

这是我的功能:

func runWSLCommand(command string) error {

    // Get the default distribution
    distro, ok, distroErr := wsl.DefaultDistro(context.Background())
    if distroErr != nil {
       panic(distroErr)
    }
    if !ok {
       panic(distroErr)
    }

    // Getting config and printing it
    pp.Println("Printing distro information:")
    pp.Printf("%v\n", distro)

    // Showing CombinedOutput
    pp.Println("Running a command with redirected output: " + command)

    // Get the command
    cmd := distro.Command(context.Background(), command)

    // Ensure to hide the window
    //cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}

    // Run wsl command and get output
    out, err := cmd.CombinedOutput()
    if err != nil {
       errorPrinter.Println(fmt.Sprintf("Unexpected error: %v\nError message: %s", err, out))
       return errors.New("Error: Failed to run command: " + fmt.Sprintf("Unexpected error: %v\nError message: %s", err, out))
    } else {
       pp.Println("WSL: " + string(out))
       return nil
    }

}

我尝试使用以下解决方案进行谷歌搜索并隐藏窗口。但是,如果未注释隐藏窗口标志,代码将无法编译:

// Get the command
cmd := distro.Command(context.Background(), command)

// Ensure to hide the window
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // This fails to compile

// Run wsl command and get output
out, err := cmd.CombinedOutput()
if err != nil {
    fmt.Fprintf(os.Stderr, "Unexpected error: %v\nError message: %s", err, out)
    return errors.New("Error: Failed to run command: " + fmt.Sprintf("Unexpected error: %v\nError message: %s", err, out))
} else {
    pp.Println("WSL: " + string(out))
    return nil
}

如何在不为每个命令打开新的 CMD 窗口的情况下调用 GoWSL 库?谢谢。

windows go windows-subsystem-for-linux fyne
1个回答
0
投票

当某些内容无法编译时,分享错误会很有帮助。这应该可以工作,但它只能在 Windows 上工作 - 所以如果你在 WSL (Linux) 中编译它,这可能是问题所在。

在另一个系统中模拟一个系统会使类似的问题变得更加严重,我建议您在 Windows 环境中编译 Windows 应用程序 - cmd 甚至 Fyne 入门指南中推荐的 MSYS2 设置。 https://fyne.io/started

© www.soinside.com 2019 - 2024. All rights reserved.