【发布时间】:2014-06-08 15:39:43
【问题描述】:
我创建了一个我想在后台不可见地运行的应用程序(无控制台)。我该怎么做?
(这是针对 Windows,在 Windows 7 Pro 64 位上测试)
【问题讨论】:
-
@kostix 当我搜索没有控制台时,它没有出现。但是您指向的标志在那个答案中,我认为您是对的,尽管语法仍然略有不同,而且我不是在寻找“窗口选项”。
我创建了一个我想在后台不可见地运行的应用程序(无控制台)。我该怎么做?
(这是针对 Windows,在 Windows 7 Pro 64 位上测试)
【问题讨论】:
网上找到的文档说我可以用类似的东西编译,
go build -ldflags -Hwindowsgui filename.go
但这会报错:unknown flag -Hwindowsgui
使用最新(1.1?)版本的编译器,这应该可以工作:
go build -ldflags -H=windowsgui filename.go
当我继续搜索时,我发现了一个说明官方文档应该很快更新的注释,但同时有很多旧式示例回答了这个错误。
【讨论】:
On Windows, -H windowsgui writes a "GUI binary" instead of a "console binary."
使用 Go 版本 1.4.2
go build -ldflags "-H windowsgui"
来自 Go 文档:
go build [-o output] [-i] [build flags] [packages]
-ldflags 'flag list'参数传递每个 5l、6l 或 8l 链接器调用。
【讨论】:
filename.go 作为参数包含在内。在 v1.10.1 中,以下语法也适用; go build -ldflags -H=windowsgui filename.go.
如果您不想在调试期间每次都输入冗长的构建指令,但仍希望控制台窗口消失,您可以在 main 函数的开头添加以下代码:
package main
import "github.com/gonutz/w32/v2"
func main() {
console := w32.GetConsoleWindow()
if console != 0 {
_, consoleProcID := w32.GetWindowThreadProcessId(console)
if w32.GetCurrentProcessId() == consoleProcID {
w32.ShowWindowAsync(console, w32.SW_HIDE)
}
}
}
现在您可以使用go build 进行编译。您的程序将在启动时短暂显示控制台窗口,然后立即将其隐藏。
【讨论】: