2014-04-03 270 views
0

在WPF中調用控制檯應用程序的代碼是什麼?我在WPF中有一個應用程序需要:調用控制檯應用程序

  1. 調用控制檯應用程序;
  2. 控制檯應用程序關閉WPF
  3. 控制檯應用程序再次調用WPF並關閉控制檯應用程序。

這是必要的,因爲我正在做一個系統,其中應用程序的更新必須關閉要複製的文件。

對於關閉應用WPF我現在用的是以下幾點:

Process wpfProc = Process.GetProcessesByName("MainWindow.exe").First(); 
wpfProc.Kill(); 

回報在控制檯應用程序:

Unhandled Exception: System.InvalidOperationException: Sequence sontains no elements 
    at System.Link.Enumerable.First[TSource]<IEnumerable'1 source> 
    at Updater.Program.Main<String[] args> in d:\endereçodoUpdater\Program.cs:line 17 

在第17行有以下幾點:

Process wpfProc = Process.GetProcessesByName("MainWindow").First(); 

我如何解決這個?

+0

'應用程序更新' - 不要試圖重新發明輪子。使用ClickOnce。 –

+0

我很感激你的幫助。由於某些特定原因,無法使用ClickOnce。我需要爲特定應用程序創建一個項目更新,其中主應用程序應該關閉一些文件複製到安裝目錄。主應用程序將會重新開放後不久。 –

+1

我寫了大量的安裝程序,其中ClickOnce不是一個選項,需要做類似的事情。 Eww。 – BradleyDotNET

回答

2

爲此,您可以的Process.Start:

Process myProc = Process.Start("MyConsoleApp.exe"); 

//Close gracefully 
Application.Exit(); 

在MyConsoleApp.exe,你將需要使用GetProcessByName殺死你的WPF應用程序,然後再次的Process.Start重新啓動它:

Process wpfProc = Process.GetProcessesByName("MyWpfApp.exe").First(); 

//If you want to directly kill it 
wpfProc.Kill(); 

//Or be nice and let it kill itself 
wpfProc.WaitForExit(); 

//Do stuff 
Process.Start("MyWpfApp.exe"); 

System.Diagnostics.Process on MSDN

+0

Eww。無需「殺死」,只需等待進程啓動,然後結束應用程序即可。在控制檯中等待另一個不在運行。 – crashmstr

+0

[進程間通信](https://stackoverflow.com/questions/528652/what-is-the-simplest-method-of-inter-process-communication-between-2-c-sharp-pro)也可能是有用的,如果你不想只是爲了殺死應用程序,但以一些聰明的方式做到這一點。 –

+0

@crashmstr,編輯爲包含一個「更好的」方法。 OP要求控制檯應用程序直接殺死WPF應用程序(我同意等待退出是一種更好的方法btw) – BradleyDotNET

相關問題