2014-04-03 215 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

相关问题