Process对象必须将 UseShellExecute属性设置为false; ProcessStartInfo.Cre

时间:2022-01-01 07:52:34

开发工具:VS2017

语言:C#

DotNet版本:.Net FrameWork 4.0及以上

一、为了演示使用措施读取控制台数据,此刻需要编写一个控制台措施,代码如下:

using System; namespace Test { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); string content = Console.ReadLine(); if(content.ToUpper() == "TEST") { Console.WriteLine("You have type correctly.\r\nCongratulation!"); } else { Console.WriteLine("Sorry,Uncorrectly!\r\nSee you later."); } } } }

这段代码的感化是:

1)在控制台输出“Hello World!”;

2)当输出“Test”(不管巨细写),则输出:

You have type correctly.

Congratulation!

3)当输出其他时,则输出:

Sorry,Uncorrectly!

See you later.

以上是必备的应用措施,如果不使用该措施,可以使用System32文件夹下的cmd.exe来当做控制台应用措施;

二、将以上生成的措施Test.exe拷贝到D盘根目录下;

三、新建一个控制台应用措施(MainConsoleApp),来操纵之前的控制台应用措施,并编写以下代码:

using System; using System.Diagnostics; namespace MainConsoleApp { class Program { static void Main(string[] args) { Process proc = new Process { StartInfo = new ProcessStartInfo { FileName = @"D:\test.exe", UseShellExecute = false, CreateNoWindow = true, RedirectStandardInput = true, RedirectStandardOutput = true } }; proc.Start(); proc.StandardInput.WriteLine("Test"); string line = null; while (!proc.StandardOutput.EndOfStream) { line += proc.StandardOutput.ReadLine() + Environment.NewLine; } Console.WriteLine(line); proc.WaitForExit(); //再次启动 proc.Start(); proc.StandardInput.WriteLine("T"); string content = proc.StandardOutput.ReadToEnd(); Console.WriteLine(content); proc.WaitForExit(); Console.ReadKey(); } } }

代码感化简介:

ProcessStartInfo.FileName:要启动的应用措施名称;

ProcessStartInfo.UseShellExecute:要重定向 IO流,,Process东西必需将 UseShellExecute属性设置为false;

ProcessStartInfo.CreateNoWindow:是否以没有窗体的模式创建应用措施,默认为false,即有窗体,如为true,即隐藏窗体。在这里不设置该值也可以;

ProcessStartInfo.RedirectStandardInput:标准输入流的重定向,重定向至Process,我们可以通过Process.StandardInput.WriteLine将数据写入标准流;

ProcessStartInfo.RedirectStandardOutput:与RedirectStandardInput相反,这是标准输出流的重定向,我们可以通过Process.RedirectStandardOutput.ReadLine等要领读取标准流数据。

Process.StandardInput.WriteLine:将数据写入标准流;

Process.StandardOutput.ReadLine(或ReadToEnd):从标准流读取数据。

四、该措施将向Test.exe写入数据,并从Test.exe读回数据,这里使用了重定向技术,运行功效如下:

Process对象必须将 UseShellExecute属性设置为false; ProcessStartInfo.Cre

我们可以看到,本来是Test.exe的措施,所有的数据操纵都进行了重定向,直接在MainConsoleApp.exe进行了输入输出。

这个技术不只仅可以用于以上的示例,还可以用于其他具有控制台输入输出的措施,如cmd.exe,这里不进行举例,本身进行试验即可。