我在winfrom里调用一个process,process执行一个console程序,叫val.exe。(这个exe会执行一个操作,然后会写一个log。)代码如下:
p.StartInfo.FileName = "val.exe";
                    p.StartInfo.Arguments = val+ " " + darice + " " + " -l " + logName;
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.CreateNoWindow = true;
                    p.StartInfo.RedirectStandardError = true;
                    p.StartInfo.RedirectStandardInput = true;
                    p.StartInfo.RedirectStandardOutput = true;                    p.Start();
                    p.WaitForExit();//走到此处,程序似乎就陷入了死锁的状态。
val.exe始终存在于process中。
另,这段代码在一个console app里执行是正常的p.WaitForExit()也可以正常响应。
val.exe在cmd里执行也是正常的,写完log之后process就会自动kill。
请教。。why

解决方案 »

  1.   

    p.Close()可以关闭。但是我捕获不到val.exe执行结束的时间,过早关闭,val.exe写的log就会有问题
      

  2.   

    private void ChangeIp(string ip)   

      string dos_cmd="netsh interface ip set address \"本地连接\" static "+ip+" 255.255.255.0";   
      Process p=new Process();
      p.StartInfo.FileName="cmd.exe";
      p.StartInfo.UseShellExecute=false;
      p.StartInfo.RedirectStandardInput=true;
      p.StartInfo.CreateNoWindow=true;
      p.Start();
      p.StandardInput.WriteLine(dos_cmd.ToString());   
      p.StandardInput.WriteLine("exit");   
      p.Close();  
    }这个是我以前写的一个修改ip地址的,希望能够对LZ有用.
      

  3.   

    因为你是主线程 所以他在等待你启动的程序退出才执行下面的代码你可以使用线程
    或者去掉waitforexit()Thread t=new Thread(new ThreadStart(run)).Start();public void run()
    {
    p.StartInfo.FileName = "val.exe"; 
                        p.StartInfo.Arguments = val+ " " + darice + " " + " -l " + logName; 
                        p.StartInfo.UseShellExecute = false; 
                        p.StartInfo.CreateNoWindow = true; 
                        p.StartInfo.RedirectStandardError = true; 
                        p.StartInfo.RedirectStandardInput = true; 
                        p.StartInfo.RedirectStandardOutput = true;                     p.Start(); 
                        p.WaitForExit();//
    }
      

  4.   

    process执行一个console程序,叫val.exe。(这个exe会执行一个操作,然后会写一个log。)一般把这些完成相对独立功能的(如写日志)程序做成类库(dll),而不是作为exe的控制台程序(还被另外一个程序调用),你这种方式是可以,但不好。