无法向cmd.exe进程发送命令

时间:2016-07-20 21:09:48

标签: c# cmd process stdout stdin

我正在尝试使用null将命令发送到打开的cmd.exe进程,但是似乎没有发送任何命令。首先,我使用全局变量p(BeginInvoke)打开一个流程。

Dispatcher.BeginInvoke(DispatcherPriority.Normal,
    new Action(() => { this.Close(); }));

之后,我尝试使用一种简单的方法发送命令,该方法将结果记录在文本框中。

StandardInput.WriteLine(str)

现在我正在使用Process p对其进行测试,但p = new Process() { StartInfo = { CreateNoWindow = true, UseShellExecute = false, RedirectStandardError = true, RedirectStandardInput = true, RedirectStandardOutput = true, FileName = @"cmd.exe", Arguments = "/C" //blank arguments } }; p.Start(); p.WaitForExit(); 显示为null,这导致无输出。有没有更好的方法将命令发送到打开的cmd.exe进程?

1 个答案:

答案 0 :(得分:1)

在没有关闭stdin的情况下,我永远无法使用stdout的同步读取,但它确实可以与stdout / stderr的异步读取一起使用。无需传入/c,只有在传递命令通过参数时才会这样做;你没有这样做,你将命令直接发送到输入。

var p = new Process()
{
    StartInfo = {
    CreateNoWindow = false,
    UseShellExecute = false,
    RedirectStandardError = true,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
    FileName = @"cmd.exe"}
};
p.OutputDataReceived += (sender, args1) => Console.WriteLine(args1.Data);
p.ErrorDataReceived += (sender, args1) => Console.WriteLine(args1.Data);
p.Start();
p.BeginOutputReadLine();
p.StandardInput.WriteLine("dir");
p.StandardInput.WriteLine("cd e:");
p.WaitForExit();

Console.WriteLine("Done");