0

我有一个控制台应用程序 A 和控制台应用程序 B。是否可以从 A 启动多个 B 实例。控制台应用程序 B 的每个实例都必须在其自己的应用程序域中运行。如果可能,该怎么做?

4

3 回答 3

2

当然这是可能的。采取的步骤是:

  1. 应用程序 A 创建一个新的应用程序域。
  2. 在新的应用程序域中执行控制台应用程序 B。
  3. 在控制台应用程序 B 完成执行后卸载新的应用程序域。

一个非常简单的例子是:

var appDomain = AppDomain.CreateDomain("a name");

appDomain.ExecuteAssembly("ConsoleApplicationB.exe"); //Update with the path to consolse application B.          

AppDomain.Unload(appDomain);

请注意,这是我能做的最简单的例子。选择更适合您需求的AppDomain.CreateDomain重载。

请注意,AppDomain.ExecuteAssembly是阻塞的。当您运行该示例时,您会注意到这一点。控制台应用程序 A 将阻塞,直到应用程序 B 退出。您将不得不异步执行此操作。

于 2013-01-24T09:52:17.917 回答
2

一个控制台只能与一个进程相关联。我没有看到其他方法System.Diagnostics.Process.Start("B")

请参阅 http://msdn.microsoft.com/en-us/library/windows/desktop/ms681944(v=vs.85).aspx

于 2013-01-23T19:14:09.977 回答
1

@I4V

我想你把它弄混了。一个进程只能与一个 控制台关联。

这意味着一个进程只能与一个控制台(in|out|err)进行通信,更简单地说,一个进程不能 拥有多个控制台窗口。

也就是说,多个 进程可以与一个控制台进行通信。理想的同步过程。

当然有一些解决方法允许一个进程拥有多个控制台窗口(WinTTY)

于 2013-11-20T13:27:13.907 回答