进程启动无法找到可执行文件

3

我希望能够从我的.NET应用程序中修改BCD。为此,我创建了以下这个小片段:

static void RunBcdEdit() 
{
    Process process = new Process();
    process.StartInfo.FileName = "c:\\Windows\\System32\\bcdedit.exe";
    process.StartInfo.UseShellExecute = false;        
    process.WaitForExit();
}

奇怪的是它会抛出一个异常,说“系统找不到指定的文件”。这有什么问题吗?

听起来c:\Windows\System32\bcdedit.exe有时无法访问? - Davesoft
2
System32是一个非常“奇怪”的目录。如果您有一个32位应用程序试图访问它,它会被重定向到\windows\syswow64。这可能是导致问题的原因。 - simon at rcl
项目 > 属性 > 构建选项卡,取消选中“首选 32 位”复选框。您不喜欢它。从此页面了解有关在 64 位操作系统上使用的文件系统重定向器以保持 32 位应用程序兼容性的更多信息。 - Hans Passant
那么,与BCDEdit交互的最佳方法是什么?或者修改BCD的最佳方法是什么? - SuperJMN
1个回答

1

我曾经遇到过在System32文件夹中运行应用程序的类似问题。我找到了一个解决方法,就是使用SysNative。在测试中,对于不同驻留在System32中的应用程序,System32和SysNative哪个会起作用并没有一致性。

static void RunBcdEdit() 
{
    Process process = new Process();
    process.StartInfo.FileName = "c:\\Windows\\SysNative\\bcdedit.exe";
    process.StartInfo.UseShellExecute = false;        
    process.WaitForExit();
}

它也适用于x86系统吗?我的意思是,我是否应该根据系统架构更改路径? - SuperJMN
@SuperJMN 我不确定在x86系统上是否可行,我只在x64上使用过,所以你需要尝试一下看看。 - Matt Nelson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接