Запустите отдельный процесс в Windows, используя Golang - PullRequest
0 голосов
/ 25 мая 2018

У меня есть код Golang, который должен запускать отдельный дочерний процесс.

Версия моей реализации для Linux, использующая syscall.ForkExec, как это.

syscall.ForkExec(my_program, []string{}, nil)

Но я не могу найтиРеализация Windows.Я нашел предложение, используя START /B.

cmd := exec.Command("START", "/B", my_program)
cmd.Start()

К сожалению, START не может быть найдено, и у меня нет другого решения, использующего Golang.

1 Ответ

0 голосов
/ 25 мая 2018

start не является автономным приложением, это (внутренняя) команда интерпретатора командной строки Windows (cmd.exe) (подробности: Справочник по командной строке / Start ), поэтому вам нужно "shell "для запуска команды start.

Используйте cmd.exe с параметром /C и передайте start и ваше приложение для запуска.

Как в этом примере:

s := []string{"cmd.exe", "/C", "start", `c:\path\to\your\app\myapp.exe`}

cmd := exec.Command(s[0], s[1:]...)
if err := cmd.Run(); err != nil {
    log.Println("Error:", err)
}

Или без среза команды:

cmd := exec.Command("cmd.exe", "/C", "start", `c:\path\to\your\app\myapp.exe`)
if err := cmd.Run(); err != nil {
    log.Println("Error:", err)
}

Вы также можете передать параметр /b в start, например, если вы не хотите, чтобы окно терминала для запущенногоприменение:

cmd := exec.Command("cmd.exe", "/C", "start", "/b", `c:\path\to\your\app\myapp.exe`)
if err := cmd.Run(); err != nil {
    log.Println("Error:", err)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...