从另一个应用程序调用Exe

时间:2012-10-18 09:53:52

标签: c# assemblies exe

我在c#中有一个完整的命令行应用程序,它有不同的模块,依赖于多个dll等。

现在,我想用另一个UI应用程序调用该CLI应用程序。但问题是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");

现在,在do while循环之间,我做了很多pf处理,而model.exit没有得到假。 但是它启动了应用程序,编写了启动应用程序消息,之后它就编写了完成应用程序并且之间的处理从未发生过。

model.Exit在没有处理的情况下也是如此。

此外,如果我使用批处理命令运行CLI.exe或在cmd上运行CLI.exe,它将完美运行。

那么,有什么想法如何管理呢?

1 个答案:

答案 0 :(得分:0)

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

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