Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net cmd.exe到C:交互式命令_.net_Process_Cmd_System.diagnostics - Fatal编程技术网

.net cmd.exe到C:交互式命令

.net cmd.exe到C:交互式命令,.net,process,cmd,system.diagnostics,.net,Process,Cmd,System.diagnostics,我必须在cmd.exe中执行一些命令,它运行良好,但交互式命令不起作用。例如,在正常cmd.exe窗口中执行sc时,在输出结束时,您会得到: Would you like to see help for the QUERY and QUERYEX commands? [ y | n ]: 如果你按下y键,你会得到更多的输出。当从C执行这个命令时,我无法传递这样的命令。即使发送一个y字符也不会使屏幕前进,它会永远停留在那里 这就是我迄今为止所尝试的: var proc = new Process

我必须在cmd.exe中执行一些命令,它运行良好,但交互式命令不起作用。例如,在正常cmd.exe窗口中执行sc时,在输出结束时,您会得到:

Would you like to see help for the QUERY and QUERYEX commands? [ y | n ]:
如果你按下y键,你会得到更多的输出。当从C执行这个命令时,我无法传递这样的命令。即使发送一个y字符也不会使屏幕前进,它会永远停留在那里

这就是我迄今为止所尝试的:

var proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "cmd.exe",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        RedirectStandardInput = true,
        RedirectStandardError = true,
        CreateNoWindow = true,
        WorkingDirectory = "C:\\"
    }
};

proc.Start();
Task.Run(() => ShowInConsoleAsync(proc.StandardOutput));
Task.Run(() => ShowInConsoleAsync(proc.StandardError));

proc.StandardInput.WriteLine("sc");
proc.StandardInput.Flush();

Thread.Sleep(1000);

proc.StandardInput.Write("y");
proc.StandardInput.Flush();

Console.ReadKey(true);
但它被困在这条线上:

Would you like to see help for the QUERY and QUERYEX commands? [ y | n ]:

有什么想法吗?

用powershell代替cmd.exe怎么样?在powershell脚本中运行自定义代码要容易得多。当然可以,但我想知道如何解决此问题。使用工具+附加到进程,并在显示提示时选择sc.exe。你会看到它叫_getch。与.NET等效的是Console.ReadKey。未重定向,您无法修复此问题。我将其放入WinDbg并获取ReadConsoleInput。低级控制台I/O功能通过允许直接访问控制台的输入和屏幕缓冲区来扩展应用程序对控制台I/O的控制。请尝试Sendkeys。你有吗?VB.NET将会。VBScript也可以。