【发布时间】:2010-10-16 09:11:06
【问题描述】:
在编写控制台应用程序时,有没有办法在 .NET 中创建第二个控制台以输出到?
【问题讨论】:
在编写控制台应用程序时,有没有办法在 .NET 中创建第二个控制台以输出到?
【问题讨论】:
好吧,你可以启动一个新的 cmd.exe 进程并使用 stdio 和 stdout 来发送和接收数据。
ProcessStartInfo psi = new ProcessStartInfo("cmd.exe")
{
RedirectStandardError = true,
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false
};
Process p = Process.Start(psi);
StreamWriter sw = p.StandardInput;
StreamReader sr = p.StandardOutput;
sw.WriteLine("Hello world!");
sr.Close();
更多关于MSDN的信息。
【讨论】:
CreateNoWindow 和 WindowStyle 属性设置为什么。也许它与 Windows 7 上的权限有关?
下面会触发依赖于应用程序的控制台窗口数量,并将控制台的数量和参数存储在字符串字典中,然后循环以生成所需数量的衍生控制台应用程序。当然,如果只产生一个,你就只需要过程的东西。
//Start looping dic recs and firing console
foreach (DictionaryEntry tests in steps)
{
try
{
Process runCmd = new Process();
runCmd.StartInfo.FileName = CONSOLE_NAME;
runCmd.StartInfo.UseShellExecute = true;
runCmd.StartInfo.RedirectStandardOutput = false;
runCmd.StartInfo.Arguments = tests.Value.ToString();
if (cbShowConsole.Checked)
{
runCmd.StartInfo.CreateNoWindow = true;
runCmd.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
}
else
{
runCmd.StartInfo.CreateNoWindow = false;
runCmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
}
runCmd.Start();
}
catch (Exception ex)
{
string t1 = ex.Message;
}
}
请注意,这旨在运行隐藏 (CreateNoWindow) 或可见。
【讨论】:
CONSOLE_NAME 在哪里以及如何定义?
单个控制台附加到任何给定进程。所以总之你不能。但是有办法“伪造”
【讨论】: