同じコンピューター上の複数のプロセスで使用される .NET クラスの 1 つのオブジェクトが必要です。
アプリケーション ドメインがあると、その境界を越えて移動することは容易ではありませんが、.NET 4.0 のメモリ マップト ファイルは、何らかの方法でそのタスクを容易にするはずです。
.NET 4.0 が最終リリースになるまで... C# である種の「プロセス間シングルトン」を作成することは可能ですか?
同じコンピューター上の複数のプロセスで使用される .NET クラスの 1 つのオブジェクトが必要です。
アプリケーション ドメインがあると、その境界を越えて移動することは容易ではありませんが、.NET 4.0 のメモリ マップト ファイルは、何らかの方法でそのタスクを容易にするはずです。
.NET 4.0 が最終リリースになるまで... C# である種の「プロセス間シングルトン」を作成することは可能ですか?
はい、1 つのプロセスで .Net Remoting シングルトンを作成し、Remoting を介して同じマシンで実行されている他のプロセスに公開できます...
編集: .Net 2.x では、Remoting ソリューションを使用する必要がありますが、.Net 3.x 以降 (WCF が利用可能な場合) では、この同じ機能が WCF を使用して利用できる場合があります (チェックしてください)...
グローバルミューテックスを使用したい場合があります。
C# でのスレッド化には、名前付きミューテックスを使用して、アプリケーションのインスタンスを 1 つだけマシン上で実行できるようにする方法の良い例 (便宜上以下にコピー) があります。
この例を拡張して、オブジェクトのインスタンスも 1 つだけであることを確認できます。
class OneAtATimePlease {
// Use a name unique to the application (eg include your company URL)
static Mutex mutex = new Mutex (false, "oreilly.com OneAtATimeDemo");
static void Main() {
// Wait 5 seconds if contended – in case another instance
// of the program is in the process of shutting down.
if (!mutex.WaitOne (TimeSpan.FromSeconds (5), false)) {
Console.WriteLine ("Another instance of the app is running. Bye!");
return;
}
try {
Console.WriteLine ("Running - press Enter to exit");
Console.ReadLine();
}
finally { mutex.ReleaseMutex(); }
}
}
もう 1 つ注意が必要なことがあります。
ターミナル サービスで実行されているサーバーで名前付きミューテックスを使用する場合、名前付きミューテックスは、すべてのセッションに対してグローバルGlobal\
(" " で始まる名前) またはターミナル サーバー セッションに対してローカルLocal\
(" " で始まる名前) という2 つのレベルの可視性を持つことができます。プレフィックスが指定されていない場合はデフォルトになります)。
Mutex の詳細については、 MSDN: Mutex Classを参照してください。
.net
dll をグローバル アセンブリ キャッシュにインストールします。その後、コンピュータ上の任意のアプリケーションから参照できます。