控制另一台电脑的 windows cmd c#(使用 tcp)

Control another pc's windows cmd c# (using tcp)

我有一个客户端/服务器程序,它从一台电脑到另一台电脑运行 os 命令。 这是我的 运行 命令的客户端代码:

        Process p = new Process();

        p.StartInfo.UseShellExecute = false;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.FileName = "cmd.exe";
        p.StartInfo.Arguments = $"/c {command}";
        p.Start();

        string output = p.StandardOutput.ReadToEnd();
        string error = p.StandardError.ReadToEnd();
        p.WaitForExit();
        // sending output and errors back to server...

此代码是获取参数的方法:命令(从服务器发送) 但是,在我尝试发送两个相互关联的命令之前,这个工作正常,例如:

cd c://
dir

当我尝试发送这两个命令时(分别地,用户每次在服务器中连续输入一个),它首先运行 cd,然后在不同的进程中运行 dir。

有什么办法可以解决这个问题吗? (比如创建一个cmd进程,每次输入一行,不用closing得到输出)

提前致谢。

我承认我是在同一台计算机上执行此操作,但我正在使用接收到的新数据的事件。举个例子会有所帮助...

ProcessStartInfo procStartInfo = new ProcessStartInfo("CMD", "");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardInput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;

errors = "";
lines = "";
proc = new Process();
proc.StartInfo = procStartInfo;
proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
proc.ErrorDataReceived += new DataReceivedEventHandler(proc_ErrorDataReceived);
proc.Start();
myStreamWriter = proc.StandardInput;
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();

然后是事件处理程序(我将在此处包括一个用于标准输出的 - 还有一个用于错误):

void proc_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (e.Data != null)
            {
                // Get the new data, show it on screen and store for retrieval.
                string newLine = e.Data.Trim() + Environment.NewLine;
                lines = lines + newLine;
            }
        }

像往常一样,不要忘记取消订阅活动并在完成后关闭流。