运行第一句批处理成功得到了PID,想利用PID再执行第二局批处理就不行了,是IO流的原因吗?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string getPID = "taskkill /im YoukuDesktop.exe /f";
string useNTSD = "ntsd /p ";
Process myPro = new Process();
myPro.StartInfo.FileName = "cmd.exe";//打开DOS控制平台
myPro.StartInfo.UseShellExecute = false;
myPro.StartInfo.CreateNoWindow = false;//是否显示DOS窗口,true代表隐藏;
myPro.StartInfo.RedirectStandardInput = true;
myPro.StartInfo.RedirectStandardOutput = true;
myPro.StartInfo.RedirectStandardError = true;
myPro.Start();
StreamWriter sIn = myPro.StandardInput;//标准输入流
sIn.AutoFlush = true;
StreamReader sOut = myPro.StandardOutput;//标准输出流
StreamReader sErr = myPro.StandardError;//标准错误流
sIn.Write(getPID + System.Environment.NewLine);//DOC命令
sIn.Write("exit" + System.Environment.NewLine);//第四条DOS命令,退出DOS窗口
string s = sOut.ReadToEnd();//读取执行DOS命令后输出信息
string er = sErr.ReadToEnd();//读取执行DOS命令后错误信息
int position = s.IndexOf("PID 为 ");
if (myPro.HasExited == false)
{
myPro.Kill();
MessageBox.Show(er);
}
else
{
label1.Text = position.ToString() ;
s = s.Remove(0,position+6);
s = s.Substring(0, 6);
s = Regex.Replace(s, @"[^\d]*", "");
textBox1.Text = "PIN码是:"+s;
}
useNTSD = useNTSD + s;
//--------------------------------------------------------------------------------------------
sIn.Write(useNTSD + System.Environment.NewLine);//DOC命令
sIn.Write("exit" + System.Environment.NewLine);//第四条DOS命令,退出DOS窗口
string s2 = sOut.ReadToEnd();//读取执行DOS命令后输出信息
string er2 = sErr.ReadToEnd();//读取执行DOS命令后错误信息
if (myPro.HasExited == false)
{
myPro.Kill();
MessageBox.Show(er2);
}
else
{
textBox2.Text = s2;
}
sIn.Close();
sOut.Close();
sErr.Close();
myPro.Close();
}
}