【rust】使用std::process::Command调用可执行程序出现控制台窗口

223 阅读1分钟

说明

最近在开发tauri应用程序,用到了std::process::Command调用其他可执行程序。但是当打包成可执行文件的时候,发现每当调用到可执行程序都会弹出黑色窗口。

最后研究发现,不是tauri的原因,而是std::process::Command的原因。

配置

原程序:

let mut child = Command::new(exec_path)
    .arg("-i")
    .arg(input)
    .arg("-o")
    .arg(output)
    .arg("-m")
    .arg(path.join("bin\models"))
    .arg("-n")
    .arg(model_name)
    .arg("-s")
    .arg("4")
    .arg("-f")
    .arg(suffix.to_owned())
    .stdout(Stdio::piped())
    .stderr(Stdio::piped())
    .spawn()
    .expect("failed to start command");

此程序打包到tauri中以后,会出黑色窗口。要想去掉命令行窗口需要添加如下改动:


const CREATE_NO_WINDOW: u32 = 0x08000000;

let mut child = Command::new(exec_path)
    // 添加下面这样一行代码,问题解决
    .creation_flags(CREATE_NO_WINDOW)
    .arg("-i")
    .arg(input)
    .arg("-o")
    .arg(output)
    .arg("-m")
    .arg(path.join("bin\models"))
    .arg("-n")
    .arg(model_name)
    .arg("-s")
    .arg("4")
    .arg("-f")
    .arg(suffix.to_owned())
    .stdout(Stdio::piped())
    .stderr(Stdio::piped())
    .spawn()
    .expect("failed to start command");