【发布时间】:2015-05-12 05:31:29
【问题描述】:
我正在编写一个仅使用命令窗口 (CMD) 进行用户输入和输出的 go 应用程序。我需要启动另一个使用自己的窗口的应用程序实例。
我尝试使用“os/exec”包,但这只会为 GUI 应用程序创建一个窗口。我尝试使用cmd /c ___ 执行应用程序,但它仍然没有创建单独的窗口。
有没有办法使用自己的窗口、标准输入和标准输出来启动非 GUI 应用程序?
【问题讨论】:
我正在编写一个仅使用命令窗口 (CMD) 进行用户输入和输出的 go 应用程序。我需要启动另一个使用自己的窗口的应用程序实例。
我尝试使用“os/exec”包,但这只会为 GUI 应用程序创建一个窗口。我尝试使用cmd /c ___ 执行应用程序,但它仍然没有创建单独的窗口。
有没有办法使用自己的窗口、标准输入和标准输出来启动非 GUI 应用程序?
【问题讨论】:
我找到了!
诀窍是在cmd /c之后使用“开始”作为命令
代码如下:
cmd:= exec.Command("cmd","/C","start",_path_to_executable_)
err=cmd.Start()
【讨论】:
没有中介cmd,也可以通过修改process creation flags:
import (
"log"
"os/exec"
"syscall"
)
const (
CREATE_NEW_CONSOLE = 0x10
)
func main() {
cmd := exec.Cmd{Path: "c:\\windows\\system32\\wsl.exe",
Args: []string{"-e", "sudo", "aptitude"},
SysProcAttr: &syscall.SysProcAttr{
CreationFlags: CREATE_NEW_CONSOLE,
NoInheritHandles: true,
},
}
err := cmd.Run()
log.Print(err)
}
NoInheritHandles 让窗口拥有自己的标准输入和标准输出。
【讨论】: