2012-10-18 73 views
0

調用埃克我在其中有不同的模塊,並且取決於多個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

回答

0

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