我想从C#代码打开Windows命令提示符,并希望从中执行包含几个命令的批处理文件。我在尝试的基础上尝试使用简单的“ echo”和“ dir”命令,但它不起作用。我既没有收到错误,也没有得到预期的输出。至少应打开cmd窗口,然后可以传递参数。
我尝试了两个选项-runnind cmd.exe和运行批处理文件。我找不到在代码中犯的错误。先谢谢您的帮助。
var baseDirectory = "~/App_Data/TestRoot";
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.UseShellExecute = false;
processStartInfo.WorkingDirectory = HttpContext.Current.Server.MapPath(baseDirectory);
processStartInfo.CreateNoWindow = false;
processStartInfo.WindowStyle = ProcessWindowStyle.Maximized;
//running cmd.exe then .bat as argument
processStartInfo.FileName = HttpContext.Current.Server.MapPath(baseDirectory + "/cmd.exe");
processStartInfo.Arguments = HttpContext.Current.Server.MapPath(baseDirectory + "/test.bat");
Process process = Process.Start(processStartInfo);
我第二次更改了FileName并删除了Arguments属性,请参考下面的代码。
processStartInfo.FileName = HttpContext.Current.Server.MapPath(baseDirectory + "/test.bat");
test.bat文件仅包含一行回声你好。当我尝试直接从CMD双击运行它时,在两种情况下都可以正常工作。仅在从C#代码调用它的情况下,我才面临问题。
我不会在输出流中得到任何结果。该批处理文件将在后台运行一个进程,该进程不会在流中返回任何输出。这不是重复的问题。请停止将其标记为重复。
答案 0 :(得分:0)
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
StartInfo.UseShellExecute = false;
StartInfo.RedirectStandardOutput = true;
StartInfo.FileName = "test.bat";
process.StartInfo = startInfo;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();