Мне нужно перезапустить приложение 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, но я не нашел никакой полезной документации для этого, просто сгенерированная документация .
Есть ли способ добиться полностью отсоединенногопроцесс