1

コマンドラインから起動するC#アプリがあります。通常、データはadd()などのコマンドラインを介して渡されますapp -a string。アプリのインスタンスを1つだけ開いて、コマンドラインから文字列を追加する場合は、1つのインスタンスにそれを認識させて更新してもらいたいです。データをデータベースに適切に配置して実行中のインスタンスにメッセージを送信するか、メッセージを実行中にデータを実行中のインスタンスに渡してデータベースに配置し、それ自体を更新することができます。

C#.NETでこれを行うにはどうすればよいですか?(3.5)

4

1 に答える 1

4

アプリケーションの最初のインスタンスは名前付きパイプを作成する必要があり、アプリケーションの後続のインスタンスは同じ名前付きパイプの作成に失敗し、代わりに名前付きパイプを開いて使用しようとする必要があります。開くと、文字列(または実際には任意のデータ)をアプリのすでに実行中のインスタンスに転送できます。その後、名前付きパイプを閉じて、アプリを終了できます。

または、.NET Remotingを使用して、アプリケーションの他のインスタンスがアクティブ化できる既知のタイプを登録し、上記と同様の動作をさせることもできます。

最終的に、「IPC」または「プロセス間通信」をすばやく検索すると、他の選択肢が開かれる可能性があります。しかし、名前付きパイプのアプローチが最もクリーンで、実装/拡張が最も簡単だと思います。

「初回実行」検出では、複数回の実行で障害状態を示さないIPCメカニズムを選択した場合(たとえば、データベースをデータ共有の仲介者として使用する場合)、名前付きミューテックスを作成することもできます。 )。処理された2つが同じ名前のミューテックスを「作成」することはできません。これらの名前はカーネルによって管理されるため(したがって、プロセス、セッション、デスクトップ、およびウィンドウステーションの境界にまたがる)、これは名前付きパイプの場合と同じ制約です。

于 2009-11-06T03:13:55.113 に答える