When i try to run BCDEDIT from my C# application i get the following error:
\'bcdedit\' is not recognized as an internal or external command, oper
There is one explanation that makes sense:
bcdedit.exe
file exists in C:\Windows\System32
.C:\Windows\System32
is on your system path, in an x86 process you are subject to the File System Redirector. Which means that C:\Windows\System32
actually resolves to C:\Windows\SysWOW64
.bcdedit.exe
in C:\Windows\SysWOW64
.The solution is to change your C# program to target AnyCPU
or x64
.
If you are stuck with x86 application on both 32it/64bit Windows and You need to call bcdedit command, here is a way how to do that:
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;
}
usage:
var returnCode = ExecuteBcdEdit("/set IgnoreAllFailures", out outputForInvestigation);
Inspiration was from this thread and from How to start a 64-bit process from a 32-bit process and from http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm