c# – 使用.NET以编程方式从Bcedit.exe获取值/设置的任何方法?

从提升的命令提示符运行bcdedit.exe时,您可以看到当前BCD设置的值.我需要读取“hypervisorlaunchtype”的设置/值

有谁知道这样做的方法?

我试图将管道输出写入tmp文件,以便我可以解析它,但由于bcdedit.exe需要从提升的提示运行,因此遇到了管道输出问题.也许有更好的方法?

编辑:我忘了添加我希望能够在没有最终用户完全看到命令提示符(即,甚至不是快速闪存)的情况下执行此操作.

最佳答案 首先,以管理员身份运行Visual Studio并在控制台应用程序中尝试此代码(使用调试运行应用程序):

    static void Main(string[] args)
    {

        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.FileName = @"CMD.EXE";
        p.StartInfo.Arguments = @"/C bcdedit";
        p.Start();
        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        // parse the output
        var lines = output.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(l => l.Length > 24);
        foreach (var line in lines)
        {
            var key = line.Substring(0, 24).Replace(" ", string.Empty);
            var value = line.Substring(24).Replace(" ", string.Empty);
            Console.WriteLine(key + ":" + value);
        }
        Console.ReadLine();
    }

但是,存在一个问题,如果您希望在从提升的Visual Studio外部启动应用程序时使用此功能,则需要配置应用程序以请求提升的权限:

在项目上,单击“添加新项”,然后选择“应用程序清单文件”.

打开app.manifest文件并替换此行:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

这一个:

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
点赞