当我尝试从我的C#应用程序运行BCDEDIT时,我收到以下错误:
'bcdedit'未被识别为内部或外部命令,可操作程序或批处理文件.
当我通过提升命令行运行它时,我得到了预期.
我使用了以下代码:
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();
String error = p.StandardError.ReadToEnd();
p.WaitForExit();
return output;
Run Code Online (Sandbox Code Playgroud)
我也试过用
p.StartInfo.FileName = @"BCDEDIT.EXE";
p.StartInfo.Arguments = @"";
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法:
我的想法已经用完了,知道为什么我会收到这个错误?
我需要的是命令的输出,如果有另一种方式也可以工作.谢谢
如果您在32位/ 64位Windows上遇到x86应用程序并且需要调用bcdedit命令,这里有一种方法:
private static int ExecuteBcdEdit(string arguments, out IList<string> output)
{
var cmdFullFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows),
Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess
? @"Sysnative\cmd.exe"
: @"System32\cmd.exe");
ProcessStartInfo psi = new ProcessStartInfo(cmdFullFileName, "/c bcdedit " + arguments) { UseShellExecute = false, RedirectStandardOutput = true };
var process = new Process { StartInfo = psi };
process.Start();
StreamReader outputReader = process.StandardOutput;
process.WaitForExit();
output = outputReader.ReadToEnd().Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList();
return process.ExitCode;
}
Run Code Online (Sandbox Code Playgroud)
用法:
var returnCode = ExecuteBcdEdit("/set IgnoreAllFailures", out outputForInvestigation);
Run Code Online (Sandbox Code Playgroud)
灵感来自这个线程以及如何从32位进程和http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm 启动64位进程
| 归档时间: |
|
| 查看次数: |
5368 次 |
| 最近记录: |