如何在单独的应用程序域中启动控制台应用程序的多个实例?

时间:2013-01-23 19:11:52

标签: c# .net console-application appdomain

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

3 个答案:

答案 0 :(得分:2)

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

之外的其他方式

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

答案 1 :(得分:2)

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

  1. 应用程序A创建一个新的应用程序域。
  2. 在新的应用程序域中执行控制台应用程序B.
  3. 在控制台应用程序B完成执行后卸载新的应用程序域。
  4. 一个非常简单的例子是:

    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退出。您必须异步执行此操作。

答案 2 :(得分:1)

@ I4V

我认为你把它搞混了。 进程只能与一个 控制台关联。

这意味着一个进程只能与一个控制台(in | out | err)进行通信,用一个术语来说,一个进程可以 拥有多个控制台窗口。

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

当然有一些变通办法允许一个进程拥有多个控制台窗口(WinTTY)