使用c#调用外部.exe时出现问题

时间:2011-03-30 15:46:47

标签: c# exe

我正在尝试从我的c#代码运行此.exe文件,它确实调用.exe文件,但随后它在中途崩溃。如果我点击浏览器上的.exe就可以完成它的工作,所以我想知道我用来调用它的代码是否有问题:

            string fileName =  "loadscript.exe";
            Utils.Logger.Info("Calling script:" + fileName);
            Process process = new Process();
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.FileName = fileName;
            process.StartInfo.RedirectStandardOutput = true;
            process.Start();
            Thread.Sleep(10000);
            process.WaitForExit();
            int exitCode = process.ExitCode;
            string output = process.StandardOutput.ReadToEnd();
            Utils.Logger.Info(".exe Output: ");
            Utils.Logger.Info(output);

2 个答案:

答案 0 :(得分:5)

  Thread.Sleep(10000);
  process.WaitForExit();
  int exitCode = process.ExitCode;
  string output = process.StandardOutput.ReadToEnd();

在我看来,这样会造成死锁,这可能是最终崩溃的问题。取消睡眠并尝试这样做:

  string output = process.StandardOutput.ReadToEnd();
  process.WaitForExit();
  int exitCode = process.ExitCode;

请参阅此问题的答案以获得解释:

ResGen.exe stucks when redirect output

答案 1 :(得分:1)

       process.StartInfo.UseShellExecute = false;

这要求您指定.exe文件的名称。如果将其设置为true,则会使用另一个Windows函数来启动该文件,它足够聪明,可以确定.bat文件需要启动cmd.exe才能解释.bat文件中的命令。

您现在需要做的是,FileName必须是“cmd.exe”,Arguments属性必须是“loadscript.bat”。