rust 可执行文件无法找到 bcdedit

rust 可执行文件无法找到 bcdedit

我正在尝试使用 std::process::Command 从 rust 可执行文件内部调用 bcdedit。

在 Windows 10 上的管理员命令提示符下执行生成的程序时,我得到:

'bcdedit' is not recognized as an internal or external command, operable program or batch file.

  • 在同一个 shell 中直接调用 bcdedit 就可以了。
  • 使用其绝对路径调用它没有任何区别。
  • 调用其他可执行文件正常。
  • 不使用 cmd.exe 而直接调用 bcdedit 将返回error: Os { code: 2, kind: NotFound, message: "The system cannot find the file specified." }

这发生在 Windows 10 Pro,版本 1903,内部版本 18362.657 上。我安装了另一个 Windows 10(Windows 10 Pro,版本 1809,内部版本 17763.1039),它运行正常。

我有一个暴露了该问题的 Rust 代码片段:

use std::process::{Command, Stdio};
use std::env::args;
fn main() {
    let mut cmd_args = args();
    let cmd = if let Some(arg1) = cmd_args.nth(1) {
        arg1
    } else {
        String::from("dir")
    };

    println!("command is '{}'", cmd);
    match Command::new("cmd.exe")
        .arg("/c")
        .arg(&cmd)
        .stdout(Stdio::piped())
        .stderr(Stdio::piped())
        .output() {
        Ok(output) => {
            println!("Executed '{}', success: {}", cmd, output.status.success());
            println!("stdout: '{}'", String::from_utf8_lossy(&output.stdout));
            println!("stderr: '{}'", String::from_utf8_lossy(&output.stderr));
        }
        Err(why) => {
            eprintln!("Failed to execute '{}', error: {:?}", &cmd, why);
        }
    }
}

答案1

@HelpingHand 的评论指出了正确的方向。问题是我意外地创建了一个 32 位可执行文件,而我以为我正在创建 64 位可执行文件。显然,64 位 Windows 上的 bcdedit 仅在 64 位下可用,因此无法在正常位置 ( C:\Windows\system32\bcdedit.exe) 中访问 32 位可执行文件。但可以在 处访问它C:\Windows\sysnative\bcdedit.exe

相关内容