Jon Skeetからのこの回答では、ミューテックスを使用してそれを行う方法について説明しています。
ミューテックスは行く方法です。プロセス名などを使用するよりもはるかに脆弱ではありません。
ただし、Mutexがガベージコレクションされていないことを確認する必要があります。サービス(完了するまで実行される「メイン」メソッドを持つのではなく、イベント駆動型)の場合、これを行う最も賢明な方法は、おそらく静的変数に入れることです。
サービスが停止したときにミューテックスを破棄するので、ファイナライズなどを待つ必要はありません。
Matthew Brindleyは、彼の答えについて同じ質問でこの例を示しています
[STAThread]
static void Main()
{
using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
{
if(!mutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.Run(new Form1());
}
}
他のアプリケーションを最大化するには、最大化するメッセージを送信する必要があります。メッセージ送信に関するこの記事を参照してください