我有一个控制台应用程序 A 和控制台应用程序 B。是否可以从 A 启动多个 B 实例。控制台应用程序 B 的每个实例都必须在其自己的应用程序域中运行。如果可能,该怎么做?
问问题
5346 次
3 回答
2
当然这是可能的。采取的步骤是:
- 应用程序 A 创建一个新的应用程序域。
- 在新的应用程序域中执行控制台应用程序 B。
- 在控制台应用程序 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 回答