从另一个应用程序

问题描述:

调用埃克我在其中有不同的模块,并且取决于多个dll等从另一个应用程序

现在,我想调用CLI应用程序与其他应用程序的用户界面C#一个完整的命令行应用程序。但问题在于,CLI应用程序的Thread部分不能正常工作,控件只能跳到最后。那么,有什么办法可以处理这种情况?

例如:我的应用程序CLI.exe,我想打电话,所以我写了下面的代码:

Process proc = new Process(); 
proc.StartInfo.FileName = CLI.exe; 
proc.StartInfo.Arguments = args; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.CreateNoWindow = false; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.StartInfo.RedirectStandardError = true; 
proc.StartInfo.RedirectStandardInput = true; 
proc.Start(); 
proc.WaitForExit(); 

现在,这个电话我要调用的应用程序。下面的代码是有我的应用程序CLI.exe

System.Console.WriteLine("Start app {0}", args); 
     do 
     { 
      System.Threading.Thread.Sleep(1000); 
     } while (model.Exited == false); 
System.Console.WriteLine("Finish app"); 

现在,在之间做while循环,我做了很多的PF处理而model.exit不要假的。 但是它启动应用程序,写入Start应用程序消息,然后它写入Finish应用程序,并在两者之间的处理从未发生过。

model.Exit也未经处理就变为真。另外,如果我使用批处理命令运行CLI.exe或在cmd上运行CLI.exe,它可以完美运行。

那么,任何想法如何管理呢?

+1

什么model.exited并没有ü检查为什么它成为真正的 –

+1

请提供更多的细节。 – sachin

+0

这似乎是你打电话的应用程序的问题。也许一些依赖于标准输入?你如何初始化'model.Exited'?你如何在循环内部设置它? – Alex

proc.WaitForExit();冻结你的进程,直到子进程结束。删除并以另一种方式处理进程退出,例如,使用事件:

proc.EnableRaisingEvents = true; 
proc.Exited += OnExit; 
+0

谢谢,但它不解决这个问题,因为我已经试过了。这个问题可能是任何线程都不在CLI.exe中工作。 – NitinG

+0

哦,好吧,我认为这是相同的应用程序代码。你绝对应该描述你对模型所做的事情,否则可能有数百个原因。顺便说一句,cli.exe使用输入吗? – mikalai

+0

是的,CLI正在将参数作为一个文件和一些其他参数。该模型再次使用该文件和参数并发送到多个线程中的另一个exe,然后每个线程返回xml,然后处理xml,然后输出参数创建另一个xml并显示结果。因此,CLI,exe是一个巨大的应用程序,其中包含多个模块和多个线程模型,并且依赖于超过30-40个dll,这些dll进一步依赖于某些系统dll和第三方dll。 – NitinG