コンソールアプリケーションAとコンソールアプリケーションBがあります。AからBの複数のインスタンスを起動することは可能ですか。コンソールアプリケーションBの各インスタンスを独自のアプリドメインで実行することが重要です。可能であれば、それをどのように行うのですか?
3 に答える
コンソールは、 1つのプロセスにのみ関連付けることができます。それ以外の方法はわかりませんSystem.Diagnostics.Process.Start("B")
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681944(v=vs.85).aspxを参照して ください
もちろん可能です。実行する手順は次のとおりです。
- アプリケーション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が終了するまでブロックします。これは非同期で行う必要があります。
@ I4V
あなたはそれを混同したと思います。プロセスは、 1つの コンソールにのみ関連付けることができます。
つまり、プロセスは1つのコンソール(in | out | err)とのみ通信できます。つまり、プロセスは複数のコンソールウィンドウを所有することはできません。
That said, more than one process can communicate with one console. Idealy well synchronized processes.
There are of course some workarounds that allow one process to have multiple console windows (WinTTY)