Process调用cmd得到委托结果问题

golden24kcn 2017-11-09 11:37:43
客户有一个命令行程序 ran.exe
给一个参数 create account,会提示用户输入两次密码,而后建立一个新的ran帐户,并在命令行打印出账户代码。

小弟用如下代码调用该程序,可以输入并在委托方法中输入了两次密码,建立了账号。但无法将帐号信息返回。



class a {

public string NewAccount { get;set;}

public void run()
{
process.StartInfo.FileName = @"D:\ran.exe";
process.StartInfo.Arguments = " create account ";
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;

process.Start();
process.BeginOutputReadLine();

// 为异步获取订阅事件
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);

}

private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (String.IsNullOrEmpty(e.Data) == false)
this.AppendText(e.Data + "\r\n");
}


public delegate void AppendTextCallback(string text);

public void AppendText(string text)
{
console += text;

if (console.IndexOf("input pwd") > -1 && !setPwd)
{
SetPwd(process);
setPwd = true;
}

if(console.IndexOf("new account is {")> -1)
{
string account_id= console.Substring(console.IndexOf("{") + 1);
account_id= account_id.Substring(0, account_id.IndexOf("}"));
//这里已经可以得到account id
NewAccount =account_id
}
}
}


//调用代码
A a = new A();
a.run();

string account = a.NewAccount;
//这里只能得到null

...全文
168 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
golden24kcn 2017-11-10
问题自己解决了,用的WaitHandle。如果各位也有类似问题,可使用此方法解决。
  • 打赏
  • 举报
回复
golden24kcn 2017-11-09
没人知道吗?
  • 打赏
  • 举报
回复
xinyu_hong 2017-11-09
当然了,你这个里面获取信息是用字符串操作的,看下是否有大小写 拼写错误问题
  • 打赏
  • 举报
回复
xinyu_hong 2017-11-09
如果你获取不到返回,可能是目标exe中没有用标准输出,将帐号信息输出到控制台上。 在cmd中执行这个exe,看是否有输出信息到控制台上。
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2017-11-09 11:37
社区公告

让您成为最强悍的C#开发者