Полностью отключить ChildProcess в Rust на Windows - PullRequest
0 голосов
/ 30 сентября 2018

Мне нужно перезапустить приложение Rust в Windows с правами администратора, поэтому я разработал команду, которая сделает это для меня.

После перезапуска я бы хотел, чтобы инициирующий процесс завершился, а дочерний процесс продолжил работу.,Однако, когда родитель выходит, ребенок тоже выходит, что является нежелательным поведением в этом случае.

Я использовал стандарт process:Command для запуска команды (упрощенно здесь):

#![allow(unused)]
fn main() {
    use std::process::Command;
    use std::os::windows::io::IntoRawHandle;

    let mut mycom = Command::new("C:\\Windows\\System32\\cmd.exe")
        .arg("/C powershell -Command Start-Process -Verb runas -File-Path C:\\my\\file");
    let child = mycom.spawn()
        .expect("command failed to start");

    //Perfectly running Child dies after pressing Enter
    let mut s = String::new();
    std::io::stdin().read_line(&mut s);
}

Я нашел некоторую документацию .detached() и child.forget() здесь и здесь , однако эти опции, похоже, больше не поддерживаются.

Я также попробовал Windows start команда, которая также не дала мне отдельный процесс.

Это относительно просто в Linux с использованием nohup или mycommand &.Может быть способ с setsid в libc, но я не нашел никакой полезной документации для этого, просто сгенерированная документация .

Есть ли способ добиться полностью отсоединенногопроцесс

...