最近用lorca做一个桌面工具,在调用命令行时总是会闪一个黑窗口,无时无刻不在提醒自己:它是做后端的。
有一个库 github.com/CodyGuo/win 通过调用win的api来隐藏窗口。不过它是没有返回字符串的。
最终网上搜索到方法,即在调用exec时,设置好参数。同时配合编译时的 go build -ldflags “-w -s -H windowsgui” 几乎完美解决。
c.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
// 执行命令
func Command1(cmd string) (string, error) {
var c *exec.Cmd
switch runtime.GOOS {
case "darwin":
case "windows":
c = exec.Command("cmd", "/C", cmd)
case "linux":
c = exec.Command("bash", "-c", cmd)
}
c.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
output, err := c.CombinedOutput()
// fmt.Println(cmd, string(output), err, "--")
return string(output), err
}
// 执行命令
func Command(params []string) (string, error) {
var c *exec.Cmd
switch runtime.GOOS {
case "darwin":
case "windows":
para := append([]string{"/C"}, params[0:]...)
c = exec.Command("cmd", para...)
case "linux":
para := append([]string{"-c"}, params[0:]...)
c = exec.Command("bash", para...)
}
c.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
output, err := c.CombinedOutput()
return string(output), err
}