我已经阅读了很多关于从C#中捕获命令输出的问题,但它们都使用StartInfo.UseShellExecute = false
属性来重定向输出。但这对我不起作用,因为我仍然希望控制台窗口在那里打开输出显示。
这允许我将输出捕获到文件,但不显示控制台。
using System.Diagnostics;
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.Arguments = "/C ping 8.8.8.8 -t";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.Start();
cmd.BeginOutputReadLine();
.
.
.
这会显示控制台,但不允许我捕获输出。
using System.Diagnostics;
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.Arguments = "/C ping 8.8.8.8 -t";
cmd.Start();
.
.
.
我的目标是启动多个命令窗口,每个窗口都运行一个给定的命令。但是,我还希望将控制台输出保存到日志文件中。每个命令窗口一个日志文件。启动命令窗口并让它们使用自己的STDOUT运行,或者将输出重定向到文件是微不足道的。但我怎么能两个都做?
我甚至试图重定向输出并启动我自己的WinForms看起来像控制台来显示输出,但是因为每个都在一个单独的进程中而无法写入GUI线程而被停止。 / p>
答案 0 :(得分:0)
好吧,对于类似“ping'命令,不需要cmd窗口,可以从c#本身完成。以下是代码:
using System.Net.NetworkInformation; //required for ping
Console.Write("Address to ping: ");
string nameOrAddress = Console.ReadLine();
bool pingable = false;
Ping pinger = new Ping();
try
{
PingReply reply = pinger.Send(nameOrAddress);
pingable = reply.Status == IPStatus.Success;
if(pingable == true)
{
Console.WriteLine("Connected successfully");
}
else if(pingable == false)
{
Console.WriteLine("Unable to connect");
}
}
catch (PingException)
{
Console.WriteLine("Unknown Error. Try again. Maybe an incorrect address");
}