ローカルホストのポート8881へのソケット接続を開く簡単にするために、「アプリケーションA」を呼び出すプログラムを作成しています。後で、コードブローを使用してexeアプリケーション呼び出し「APPLICATIONB」を生成します。
try
{
XmSam.Log("Spawning (" + process + ")");
ProcessEx proc = new ProcessEx();
proc.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + process + ".exe";
proc.StartInfo.Arguments = parameters;
proc.StartInfo.UseShellExecute = false;
proc.Start();
Program.Processes.Add(proc);
XmSam.Log("Spawned " + proc.ProcessName);
}
catch (Exception ex)
{
XmSam.Log(ex);
}
アプリケーションAをオフにしても(アプリケーションを停止するか、ウィンドウタスクマネージャーでそのプロセスを強制終了することにより)、アプリケーションBは引き続き実行されます。これは問題ありません。ただし、アプリケーションAを再度開始すると、例外が発生しました。
2012-10-18 16:21:23 - Only one usage of each socket address (protocol/network address/port) is normally permitted
2012-10-18 16:21:23 - at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
このエラーは、アプリケーションAがポート8881へのソケットを開こうとしたときに発生しました。このエラーは、アプリケーションBを強制終了すると消えます。以下のコードが示すようなものがないため、アプリケーションBのコードが原因ではないと思います。
[STAThread]
static void Main()
{
while (true)
{
}
}
ProcessクラスでMSDNを調べようとしましたが、これについては何もわかりませんでした。プロセスを生成したとき、そのプロセスは呼び出しアプリケーションから独立していると思いましたが、そうではないようです。呼び出しアプリケーションを保持せずにプロセスを生成できる設定を知っていますか?
別の方法は、アプリケーションAにコードを入れてアプリケーションBを強制終了することですが、特にアプリケーションAが予期せずクラッシュした場合、それはアイデアの解決策ではありません。
ありがとうございました。