我正在尝试使用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进程?
答案 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");