【问题标题】:Process.Start cannot find the executableProcess.Start 找不到可执行文件
【发布时间】:2018-06-29 17:57:43
【问题描述】:

我想从我的 .NET 应用程序中更改 BCD。为此,我创建了这个小 sn-p:

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

奇怪的是它抛出了一个异常

系统找不到指定的文件

这是怎么回事?

【问题讨论】:

  • Whelp,听起来 c:\Windows\System32\bcdedit.exe 有时无法访问?
  • System32 是一个非常“奇怪”的目录。如果您有一个 32 位应用程序试图访问它,它会被重定向到 \windows\syswow64。这可能是让你绊倒的原因。
  • Project > Properties > Build 选项卡,取消勾选“Prefer 32-bit”复选框。你不喜欢它。从this page 了解有关在 64 位操作系统上用于保持 32 位应用程序兼容的文件系统重定向器的更多信息。
  • 那么,与 BCDEdit 交互的最佳方法是什么?还是修改 BCD?

标签: c# .net process.start


【解决方案1】:

我在使用 System32 运行应用程序时遇到了类似的问题。我发现的一种解决方法是使用 SysNative。在测试中,System32 何时可以工作或 SysNative 何时可以为驻留在 System32 中的不同应用程序工作并不一致。

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

【讨论】:

  • 它也适用于 x86 系统吗?我的意思是,我应该根据系统架构更改路径吗?
  • @SuperJMN x86系统我不太清楚,我只在x64上用过,所以你得试试看。
猜你喜欢
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 2019-11-02
  • 2013-11-20
  • 2012-07-22
  • 2017-05-07
相关资源
最近更新 更多