我正在尝试从我的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);
答案 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;
请参阅此问题的答案以获得解释:
答案 1 :(得分:1)
process.StartInfo.UseShellExecute = false;
这要求您指定.exe文件的名称。如果将其设置为true,则会使用另一个Windows函数来启动该文件,它足够聪明,可以确定.bat文件需要启动cmd.exe才能解释.bat文件中的命令。
您现在需要做的是,FileName必须是“cmd.exe”,Arguments属性必须是“loadscript.bat”。