Порождение процессов в Windows с помощью Rust - PullRequest
0 голосов
/ 16 июня 2019

Я на Windows 10, и пытаюсь порождать процессы с std::process::Command. Есть некоторые приложения, которые я хочу открыть с помощью Command::new("cmd"), а затем передать аргумент. Например, я хочу передать start ms-settings:windowsupdate, а также start ms-settings:appsfeatures, что откроет «Центр обновления Windows» и «Приложения и компоненты» в «Настройках Windows». Однако в существующем состоянии нельзя одновременно открывать более одного экземпляра «Параметры Windows». Итак, я хочу открывать эти конкретные процессы по одному, и когда я закрываю один процесс, я хочу, чтобы другой процесс порождался. Единственный способ, которым мне удалось это сделать, это сделать:

let processes = [
    "start ms-settings:windowsupdate",
    "start ms-settings:appsfeatures"
]

for process in &processes {
    Command::new("cmd")
    .arg("/K")
    .arg(&process)
    .creation_flags(0x00000010) // CREATE_NEW_CONSOLE
    .status()
    .expect("Process could not be spawned.");
}

, который работает, но он откроет командную строку, когда появится первый процесс, и единственный способ вызвать следующий процесс - закрыть командную строку, которую открывает первый процесс (в отличие от простого закрытия самого окна). Я пробовал другие флаги в .creation_flags(), но другие флаги будут открывать все процессы одновременно, поэтому будет открыт только последний start ms-settings: процесс, поскольку не может быть более одного экземпляра. Есть ли способ порождать эти процессы по одному, не вызывая при этом также командную строку?

...