Можно ли использовать стандартную библиотеку для порождения процесса без отображения окна консоли в Windows? - PullRequest
0 голосов
/ 11 января 2020

Это то, что у меня сейчас есть:

Command::new("/path/to/application")
  .args("-param")
  .spawn()

Похоже, что Rust использует CreateProcessW для запуска Windows процессов, что позволяет создавать флаги. Возможно, есть флаг, который будет делать то, что мне нужно?

Ответы [ 2 ]

3 голосов
/ 31 марта 2020

Вы можете использовать std::os::windows::process::CommandExt::creation_flags. Пожалуйста, обратитесь к странице документации для Флаги создания процесса или в идеале используйте константы из winapi .

Вы писали, что это приложение GUI, поэтому я Предположим, вам не нужен консольный вывод на этом. DETACHED_PROCESS не создает conhost.exe, но если вы хотите обработать вывод, вы должны использовать CREATE_NO_WINDOW.

Я бы также рекомендовал использовать start в качестве команды, потому что в противном случае вам придется использовать cmd.exe, и это, вероятно, задержит запуск на несколько миллисекунд.

Пример

use std::process::Command;
use std::os::windows::process::CommandExt;

const CREATE_NO_WINDOW: u32 = 0x08000000;
const DETACHED_PROCESS: u32 = 0x00000008;

let mut command = Command::new("cmd").args(&["/C", "start", &exe_path]);
command.creation_flags(DETACHED_PROCESS); // Be careful: This only works on windows

// If you use DETACHED_PROCESS you could set stdout, stderr, and stdin to Stdio::null() to avoid possible allocations.
0 голосов
/ 19 марта 2020

std:os::windows::process::CommandExt расширяет компоновщик process::Command с параметрами Windows -specifi c при построении для Windows. В стандартной библиотеке не определена константа для CREATE_NO_WINDOW, поэтому вам нужно либо определить ее самостоятельно, либо использовать необработанное значение 0x08000000:

let command = Command::new("my-command")
    .args("param")
    .creation_flags(0x08000000)
    .spawn();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...