我正在 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 上工作 - 所以如果你在 WSL (Linux) 中编译它,这可能是问题所在。
在另一个系统中模拟一个系统会使类似的问题变得更加严重,我建议您在 Windows 环境中编译 Windows 应用程序 - cmd 甚至 Fyne 入门指南中推荐的 MSYS2 设置。 https://fyne.io/started