假设我有以下代码,使用syscall隐藏命令行窗口

process := exec.Command(name, args...)
process.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
err := process.Start()
if err != nil {
    log.Print(err)
}

但当我编译并试图在Windows中运行它时,命令行窗口再次出现

我可以做些什么来防止命令行窗口出现?

PS我已经知道如何使用go build -ldflags -H=windowsgui将golang source编译成Windows GUI可执行文件,但这样做只能确保程序本身不会出现命令行窗口,Exec将显示这些窗口

推荐答案

There是一个更好的解决方案,它可以运行exec.Command(),而不会产生一个可见窗口(͡°͜ʖ͡°).

以下是我的代码:

第一个import "syscall"

cmd_path := "C:\\Windows\\system32\\cmd.exe"
cmd_instance := exec.Command(cmd_path, "/c", "notepad")
cmd_instance.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
cmd_output, err := cmd_instance.Output()

来源:

Go相关问答推荐

如何修复proxyconnect tcp:tls:第一条记录看起来不像tls握手

如何在 Chi Router 的受保护路由下提供静态文件(尤其是图像)?

Go 中带有回调的 MiniDumpWriteDump

当我使用 CircleCI 构建 Go Image 时,我得到runtime/cgo: pthread_create failed: Operation not allowed

xml.Unmarshal 不支持的类型 struct

为什么互斥量比 golang 中的通道慢?

查找、解析和验证邮箱地址

fmt.Printf() 标志 '0' 不会被字符串忽略

从动态输入中提取字符串,其中部分字符串可能不存在

Golang并发写入多个文件

将shell输出绑定到Go中的 struct 的最佳方法?

如何在测试中使用自定义标志(使用`testify/suite`)

有没有办法判断值是否满足接口中定义的类型约束?

自定义指标未显示在 prometheus web ui 中,grafana 中也是如此

如何在 GORM 中获取字段值

为什么 x/net/html Token().Attr 上的 len 在此处为空切片返回非零值?

go mod tidy 错误消息:但是 go 1.16 会 Select

如何扩充 ResponseWriter 的 Header() 返回的 map

泛型:对具有返回自身的函数的类型的约束

将函数的值作为输入参数返回给另一个