C# &引用;系统找不到指定的文件";进程.Start()出错;

C# &引用;系统找不到指定的文件";进程.Start()出错;,c#,process,C#,Process,我试图让流程以字符串的形式响应,这样我就可以在代码的不同位置使用它,这是我迄今为止的解决方案: const string ex1 = @"C:\Projects\MyProgram.exe "; const string ex2 = @"C:\Projects\ProgramXmlConfig.xml"; Process process = new Process(); process.StartInfo.WorkingDirectory = @"C:\P

我试图让流程以字符串的形式响应,这样我就可以在代码的不同位置使用它,这是我迄今为止的解决方案:

const string ex1 = @"C:\Projects\MyProgram.exe ";
      const string ex2 = @"C:\Projects\ProgramXmlConfig.xml";


      Process process = new Process();
      process.StartInfo.WorkingDirectory = @"C:\Projects";
      process.StartInfo.FileName = "MyProgram.exe ";
      process.StartInfo.Arguments = ex2;
      process.StartInfo.Password = new System.Security.SecureString();
      process.StartInfo.UseShellExecute = false;
      process.StartInfo.RedirectStandardOutput = true;  

      try
      {
          process.Start();
          StreamReader reader = process.StandardOutput;
          string output = reader.ReadToEnd();
      }
      catch (Exception exception)
      {
          AddComment(exception.ToString());
      }
但当我运行这个时,我得到:

代码运行良好,但它只是打开控制台窗口,所有进程响应都在那里,所以我不能将其用作字符串


有人知道我为什么会出现此错误,或者我的问题可能有不同的解决方案吗?

我怀疑问题在于您指定的文件名与您的工作目录有关,您希望
Process.Start
在启动流程时查看那里-我认为当
UseShellExecute
false
时,它不会这样工作。尝试只指定要启动的进程的绝对文件名:

process.StartInfo.FileName = @"C:\Projects\MyProgram.exe";

请注意,我还删除了为
FileName
属性指定的字符串末尾的空格-这完全可能也是造成问题的原因。

对于System32访问,如果您试图在x64上运行x86应用程序,则必须在文件名中使用“Sysnative”关键字,而不是“System32”

例如:代替:

C:\Windows\System32\whoiscl.exe

应该是:

C:\Windows\Sysnative\whoiscl.exe


希望这对某人有所帮助

@DariaShalimov如果这是你问题的答案,mark asanswer@DariaShalimov:答案的分数旁边应该有一个勾号,在左侧-只需单击勾号即可接受答案。您能否更详细地解释为什么将
UseShellExecute
设置为
false
会改变
WorkingDirectory
的行为?我希望如果我设置了一个工作目录和一个文件名,它将使用该工作目录来执行该文件。@JohnGrabanski:UseShellExecute的文档中:“WorkingDirectory属性的行为因UseShellExecute属性的值而异。当UseShellExecute为true时,WorkingDirectory属性指定可执行文件的位置。如果WorkingDirectory是一个空字符串,则假定当前目录包含可执行文件。“它确实帮助了我!@foxx1337我很高兴它在4年后工作了
process.StartInfo.FileName = @"C:\Projects\MyProgram.exe";