控制另一台电脑的 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;
}
}
像往常一样,不要忘记取消订阅活动并在完成后关闭流。
我有一个客户端/服务器程序,它从一台电脑到另一台电脑运行 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;
}
}
像往常一样,不要忘记取消订阅活动并在完成后关闭流。