C#调用exe文件,怎么才能获取exe文件的输出?
@echooffsetBASE=%~dp0cd"%BASE%"setPATH=%BASE%ruby\bin;%BASE%java\bin;%BASE%tools;%BAS...
@echo off
set BASE=%~dp0
cd "%BASE%"
set PATH=%BASE%ruby\bin;%BASE%java\bin;%BASE%tools;%BASE%svn\bin;%BASE%nmap;%BASE%postgresql\bin;%PATH%
IF NOT EXIST "%BASE%java" GOTO NO_JAVA
set JAVA_HOME="%BASE%java"
:NO_JAVA
IF EXIST %BASE%config\database.yml GOTO NO_OPTS
set MSFCONSOLE_OPTS=-e production -y "%BASE%config\database.yml"
:NO_OPTS
start console.exe -c "%BASE%tools\console.xml" -t Metasploit
---------------------------------------------------------------------------------------------------
上面是bat文件的内容,启动了一个console.exe的程序,怎么用C#获取它的输出呢? 展开
set BASE=%~dp0
cd "%BASE%"
set PATH=%BASE%ruby\bin;%BASE%java\bin;%BASE%tools;%BASE%svn\bin;%BASE%nmap;%BASE%postgresql\bin;%PATH%
IF NOT EXIST "%BASE%java" GOTO NO_JAVA
set JAVA_HOME="%BASE%java"
:NO_JAVA
IF EXIST %BASE%config\database.yml GOTO NO_OPTS
set MSFCONSOLE_OPTS=-e production -y "%BASE%config\database.yml"
:NO_OPTS
start console.exe -c "%BASE%tools\console.xml" -t Metasploit
---------------------------------------------------------------------------------------------------
上面是bat文件的内容,启动了一个console.exe的程序,怎么用C#获取它的输出呢? 展开
1个回答
展开全部
把cmd.exe 替换成bat文件名,
"/c dir" 替换成文件名后面的参数
供参考:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo=new System.Diagnostics.ProcessStartInfo("cmd.exe");
p.StartInfo.Arguments = "/c dir";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
string output=p.StandardOutput.ReadToEnd();
MessageBox.Show(output);
"/c dir" 替换成文件名后面的参数
供参考:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo=new System.Diagnostics.ProcessStartInfo("cmd.exe");
p.StartInfo.Arguments = "/c dir";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
string output=p.StandardOutput.ReadToEnd();
MessageBox.Show(output);
更多追问追答
追问
我这样试过了,我的C#程序会没有响应。调用bat文件的进程在打开exe文件后就结束了,这时候是获取不了输出的吧?
追答
"p.WaitForExit();"
这句话会阻塞程序,直到bat文件执行结束.然后读取输出.
因为你的bat启动了一个exe文件,"p.WaitForExit();"会等待exe的退出.
p.StandardOutput.ReadToEnd(); 也会阻塞,直到进程执行完成才读取输出结果.
改成下面试试,加一个textbox显示输入.
延时的时间可以自己修改.
如果要一直读取输出的话,可以不要break,把代码放在backgroudworker里面执行,使用backgroundworker中止while循环.
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo(@"D:\mybat\test2.bat");
//p.StartInfo.Arguments = "/c dir";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
//p.WaitForExit();
string line=string.Empty;
while(true)
{
Application.DoEvents();
System.Threading.Thread.Sleep(100);
line = p.StandardOutput.ReadLine();
if(line!=null&&line.Length>0)
{
textBox1.Text+=line;
}
else
{
break;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询