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

...全文
205 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
golden24kcn 2017-11-10
  • 打赏
  • 举报
回复
问题自己解决了,用的WaitHandle。如果各位也有类似问题,可使用此方法解决。
golden24kcn 2017-11-09
  • 打赏
  • 举报
回复
没人知道吗?
好大一地嗯 2017-11-09
  • 打赏
  • 举报
回复
当然了,你这个里面获取信息是用字符串操作的,看下是否有大小写 拼写错误问题
好大一地嗯 2017-11-09
  • 打赏
  • 举报
回复
如果你获取不到返回,可能是目标exe中没有用标准输出,将帐号信息输出到控制台上。 在cmd中执行这个exe,看是否有输出信息到控制台上。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧