我正在尝试将运行于CMD提示符之外的程序的输出复制到Windows剪贴板。
private void button1_Click(object sender, EventArgs e)
{
/*Relevant Code*/
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = String.Format("/k cd {0} && backdoor -rt -on -s{1} -p{2}", backdoorDir, pSN, sPPC);
p.Start();
p.WaitForExit();
string result = p.StandardOutput.ReadToEnd();
System.Windows.Forms.Clipboard.SetText(result);
}如果我将它直接输入CMD,它将如下所示:
第一命令(更改目录):
cd C:\users\chris\appdata\roaming\backdoor第二命令(打开后门,一个cmd工具)。)):
backdoor -rt -on -sCCDXE -p14453当我通过CMD做这件事时,我得到了这样的结果:
The backdoor password is: 34765
C:\users\chris\appdata\roaming\backdoor>但是,在运行我的C#代码时,这是添加到剪贴板中的唯一内容:
C:\users\chris\appdata\roaming\backdoor>为什么它不捕获“后门密码是: 34765?”就像p.StandardOutput.ReadToEnd()没有阅读所有的东西一样。
发布于 2015-06-16 03:17:02
在ReadToEnd之前调用WaitForExit
克里斯的代码:
private void button1_Click(object sender, EventArgs e)
{
/*Relevant Code*/
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = String.Format("/k cd {0} && backdoor -rt -on -s{1} -p{2}", backdoorDir, pSN, sPPC);
p.Start();
string result = p.StandardOutput.ReadToEnd();
p.WaitForExit();
System.Windows.Forms.Clipboard.SetText(result);
}示例控制台应用程序代码:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/C dir";
p.Start();
string result = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine(result);
Console.ReadLine();/C执行命令,然后终止cmd进程。这是此代码工作所必需的。否则,它将永远等待。发布于 2015-06-16 05:51:20
一个答案是,很可能是,程序是,实际上不是,而是直接写到StdOut。
通过将输出管道输送到一个文件中来测试这一点:
backdoor -rt -on -sCCDXE -p14453 > c:\text.txt 如果新文件也不包含输出,那么您将陷入困境,可能需要查看屏幕抓取。
https://stackoverflow.com/questions/30858148
复制相似问题