从C#

时间:2019-03-20 10:33:57

标签: batch-file cmd

我想从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#代码调用它的情况下,我才面临问题。

我不会在输出流中得到任何结果。该批处理文件将在后台运行一个进程,该进程不会在流中返回任何输出。这不是重复的问题。请停止将其标记为重复。

1 个答案:

答案 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();
相关问题