gpt4 book ai didi

c# - 在 C# Winforms 应用程序中嵌入 CMD 终端

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:02 24 4
gpt4 key购买 nike

我打算做的是构建一个应用程序,除其他外,它将像某些 IDE 一样嵌入命令行(我发现这非常有用)。

这是我到目前为止的代码,请注意它是一个 Winforms 项目:

public partial class Form1 : Form
{
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();

public Form1() {
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e) {
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.UseShellExecute = false;
info.CreateNoWindow = true;

p.StartInfo = info;
p.Start();
}

private void button1_Click(object sender, EventArgs e) {
using(StreamWriter sw = p.StandardInput) {
if(sw.BaseStream.CanWrite) {
sw.WriteLine(textBox1.Text);
}
}
textBox2.Text = p.StandardOutput.ReadToEnd();
textBox3.Text = p.StandardError.ReadToEnd();
p.WaitForExit();
}
}
}

如您所见,有 3 个文本框和一个按钮:

  • textbox1 用于输入命令
  • textbox2 用于标准输出
  • textbox3 用于标准错误

关于我的问题:

我只能输入一个命令,因为执行它后,我的CMD窗口消失了。我知道它会消失,因为我设置了 info.CreateNoWindow = false; 它确实消失了,如果我尝试输入另一个命令,我会得到一个异常。

我该如何继续让我的 CMD 窗口保持“事件”状态,以便我可以随心所欲地使用它?简而言之,我想真正模仿 CMD 行为。

如果有什么不清楚的地方,请随时询问更多信息。

额外信息/我尝试了什么:

我尝试添加 info.Attributes = "/K"; 因为我知道 /K 应该让 CMD 保持事件状态。我还读到 p.WaitForExit(); 应该让 CMD 保持事件状态,但据我所知,这只是为了读取输出。不用说,我不需要它,因为我已经重定向了它的输出。这些解决方案都不起作用,但我完全有可能以错误的方式使用它们。

我需要该进程处于事件状态,以便我可以使用 cd 轻松导航并在需要时执行一系列命令,例如访问 ftpmysql。我知道我可以使用参数解决这两个示例,但不是针对每个应用程序。简而言之,每次都产生一个新进程不是我想要的。我希望 CMD 界面始终处于打开状态。

cmd进程在

之后死亡
using(StreamWriter sw = p.StandardInput) {
if(sw.BaseStream.CanWrite) {
sw.WriteLine(textBox1.Text);
}
}

但我无法确定原因。

最佳答案

CMD控制台提供的是一个接口(interface)来执行预定义的函数(在System32或%PATH%中)。 Process 类也具有相同的功能,您可以做的是当用户在文本框 2(可以是多行、黑色背景、白色文本)中输入命令文本并按下回车键时,您可以通过命令文本到 Process p = new Process(); 并附加结果,使其看起来像单个 cmd session 。现在,在传递整个命令文本之前,我们需要分隔参数(如果有的话),即出现在第一个空格之后的文本。示例:

SHUTDOWN /S /T 10

Shutdown 是文件名,/S/T 10 是参数。

在执行之前设置 ProcessStartInfo 的默认目录:-

_processStartInfo.WorkingDirectory = @"%Path%";

否则默认为 System32 文件夹。

关于c# - 在 C# Winforms 应用程序中嵌入 CMD 终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33079046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com