Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
C# 在新控制台中运行命令并在C中捕获输出#_C# - Fatal编程技术网

C# 在新控制台中运行命令并在C中捕获输出#

C# 在新控制台中运行命令并在C中捕获输出#,c#,C#,我已经阅读了关于在C#中捕获命令输出的许多问题,但是它们都使用StartInfo.UseShellExecute=false属性重定向输出。但这对我不起作用,因为我仍然希望控制台窗口打开一个显示输出的窗口 这允许我将输出捕获到文件中,但不显示控制台 using System.Diagnostics; Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.Arguments = "/C pin

我已经阅读了关于在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();
.
.
.
我的目标是启动多个命令窗口,每个窗口运行一个给定的命令。但是,我还希望将控制台输出保存到日志文件中。每个命令窗口一个日志文件。启动命令窗口并让它们使用自己的标准输出运行,或者将输出重定向到文件,这很简单。但我怎么能两者兼得呢


我甚至尝试重定向输出并启动我自己的WinForms,这些WinForms看起来像控制台来显示输出,但是被停止了,因为每个WinForms都在一个单独的进程中,无法写入GUI线程。

好吧,对于类似“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");
}

对于WinForms方法,可能需要使用
async
wait
,这会将处理传递回GUI。另外,如果您要保存到日志文件,为什么需要在cmd窗口中显示它?@Juan我无法控制新进程中的命令如何引导它的输出如果您以不正确的格式键入地址,例如,如果我输入“dfsdff”,它将转到else,因为它的格式不能通过pingable读取。测试它,这是我用于我的程序的代码,它工作没有问题。再次,运行自己的代码,看看它是可访问的。我已经对它进行了测试,代码已经到达,否则它就不会被包括在内。我没有注意到catch语句。很抱歉固定的!再次抱歉