C# 使用c运行交互式命令行exe#

C# 使用c运行交互式命令行exe#,c#,C#,我可以使用process.start()运行命令行进程。 我可以使用标准输入提供输入。之后,当流程再次要求用户输入时,我的程序如何知道并将输入传递给该exe?如果我理解正确,我认为您应该能够使用和重定向标准输入/输出 WinSCP项目有一个C#示例,说明如何使用这种方式与它通信。您可以在这里找到它:(虽然这个示例只收集输出,根本不使用它,但技术应该是相同的。)有一个类似于您需要的,使用过程。StandardInput和StreamWriter Process sortProces

我可以使用
process.start()
运行命令行进程。
我可以使用标准输入提供输入。之后,当流程再次要求用户输入时,我的程序如何知道并将输入传递给该exe?

如果我理解正确,我认为您应该能够使用和重定向标准输入/输出

WinSCP项目有一个C#示例,说明如何使用这种方式与它通信。您可以在这里找到它:(虽然这个示例只收集输出,根本不使用它,但技术应该是相同的。)

有一个类似于您需要的,使用
过程。StandardInput
StreamWriter

        Process sortProcess;
        sortProcess = new Process();
        sortProcess.StartInfo.FileName = "Sort.exe";

        // Set UseShellExecute to false for redirection.
        sortProcess.StartInfo.UseShellExecute = false;

        // Redirect the standard output of the sort command.  
        // This stream is read asynchronously using an event handler.
        sortProcess.StartInfo.RedirectStandardOutput = true;
        sortOutput = new StringBuilder("");

        // Set our event handler to asynchronously read the sort output.
        sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);

        // Redirect standard input as well.  This stream
        // is used synchronously.
        sortProcess.StartInfo.RedirectStandardInput = true;
        sortProcess.Start();

        // Use a stream writer to synchronously write the sort input.
        StreamWriter sortStreamWriter = sortProcess.StandardInput;

        // Start the asynchronous read of the sort output stream.
        sortProcess.BeginOutputReadLine();
        Console.WriteLine("Ready to sort up to 50 lines of text");
        String inputText;
        int numInputLines = 0;
        do 
        {
            Console.WriteLine("Enter a text line (or press the Enter key to stop):");

            inputText = Console.ReadLine();
            if (!String.IsNullOrEmpty(inputText))
            {
                numInputLines ++;
                sortStreamWriter.WriteLine(inputText);
            }
        }

希望这能帮助您查找IPC。正如robert在上面所展示的那样,.NET中的
过程
类将对您有所帮助。但特别是针对您的问题(如何知道何时写入数据):您不能。不是一般的

如果您知道所需的输入(例如“yyy”),您可以在所创建流程的
STDIN
中提供它。您不必等待程序请求此信息:当程序需要数据时,它只需从
STDIN
读取即可


如果您需要处理程序输出以决定写入什么
STDIN
,请尝试读取进程
STDOUT
。不过,您可能会遇到刷新问题…

谢谢您的回复。我试过了。但要求用户输入的过程不是预定义的。场景如图1所示。我想为c#2设计在线编剧。我可以使用DOMNcretaeEXE3代码构建程序。现在我想通过c#4运行这个exe。用户可以编写在不同阶段需要用户输入的任何类型的程序。希望你能理解全部scenario@rajshades:我本以为这与此类似,只是不是一次性发送所有命令,而是发送一个命令,读取输出,发送下一个命令等。尽管我没有测试过这一点。不过,作为一般性的注意事项,如果您正在创建exe,您能否尝试为它提供更好的通信方式(WCF、TCP/IP套接字、名称管道等)?再次感谢。但这是特定于sort.exe的,我正在为每个用户在运行时生成exe。我不知道他会键入哪个程序。我想你可以用“cmd.exe”代替他们选择的可执行文件。这是一个黑客程序,但它可能会得到这份工作。罗伯特能解释一下如何使用cmd.exe来解决我的问题吗
sortProcess.StartInfo.FileName=“cmd.exe”
可能会根据您的回答更新trickI以运行命令行程序,包括对“标准输入”的支持–谢谢!您可能感兴趣的内容包括使用.NET进程的许多复杂性,特别是在使用输入和输出方面