"系统找不到指定的文件" process.Start();

时间:2015-07-09 07:04:18

标签: c# process

我正在尝试将进程响应为字符串,以便我可以在我的代码中的不同位置使用它,这是我到目前为止的解决方案:

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());
      }

但是当我跑步时,我得到了:

"The system cannot find the file specified" error in process.Start(); without 
      process.StartInfo.UseShellExecute = false;
      process.StartInfo.RedirectStandardOutput = true;  

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

有谁知道我为什么会收到此错误,或者可能是我的问题的其他解决方案?

2 个答案:

答案 0 :(得分:14)

我怀疑问题是您指定的文件名是相对于您的工作目录的,并且您希望Process.Start在启动过程时看到{ - 1}} - 我不会相信当UseShellExecutefalse时,它会以这种方式运作。尝试只指定要启动的进程的绝对文件名:

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

请注意,我还删除了您为FileName属性分配的字符串末尾的空格 - 这完全有可能导致问题的出现。

答案 1 :(得分:4)

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

EG:而不是:

  

C:\ Windows \ System32下\ whoiscl.exe

应该是:

  

C:\的Windows \ Sysnative \ whoiscl.exe

希望这有助于某人