如何在Windows系统中将Go程序作为后台daemon运行并隐藏控制台窗口?
Windows下可以实现自行开发的Go程序后台运行、隐藏控制台窗口,也可以实现类似Linux daemon的常驻后台效果,常用操作方案如下:
方案1:编译时直接隐藏控制台窗口(无需额外配置,最常用)
在编译Go程序时添加Windows专属的编译参数,生成的exe运行时默认不会弹出控制台窗口:
go build -ldflags "-H windowsgui" hello-world.go
注意:该方案会屏蔽程序的stdout、stderr输出,如果需要排查问题请提前配置日志文件输出逻辑。
方案2:运行时通过系统命令后台启动(无需重新编译)
如果不想修改编译逻辑,可以直接通过Windows自带的命令启动exe时隐藏窗口、后台运行:
- 临时测试场景(关闭当前cmd窗口后程序会同步退出):
打开cmd执行命令:start /B hello-world.exe - 常驻后台场景(关闭启动用的终端窗口后程序仍正常运行):
打开PowerShell执行命令:Start-Process -WindowStyle hidden -FilePath .\hello-world.exe
方案3:注册为Windows系统服务(实现daemon级常驻、开机自启)
如果需要程序开机自动启动、后台常驻运行,类似Linux daemon的效果,可以将exe注册为Windows系统服务:
- 改代码适配服务逻辑:引入官方依赖包
golang.org/x/sys/windows/svc实现Windows服务的生命周期回调,编译后直接用系统自带的sc命令注册服务:
注册服务命令:sc create HelloWorldService binPath= "C:\绝对路径\到\hello-world.exe" start= auto
启动服务命令:sc start HelloWorldService
停止&删除服务命令:sc stop HelloWorldService && sc delete HelloWorldService - 不改代码适配:可以借助第三方Windows服务封装工具,直接将现有exe注册为系统服务,无需修改业务代码。
注意:后台运行或注册为服务时,所有涉及文件读写的路径建议使用绝对路径,避免因工作目录不一致导致的资源找不到问题。
内容的提问来源于stack exchange,提问作者Áron Pop Adorján
相关产品推荐
相关产品推荐

