2009-07-13 17 views
1

私はc#windowsアプリケーションを使用しています。私のアプリケーションを起動したとき実行中のアプリケーションのインスタンスを確認して終了する

、私は、同じアプリケーションのために タスクマネージャにインスタンスをチェックしたいです。既に実行中のインスタンスがある場合は、 shudがプロセスを終了し、新しいプロセスを開始します。

これは、アプリケーションのインスタンスが1つしか実行されていないことを確認するためです。

答えて

1

は、あなたのプログラムのインスタンスが1つだけ実行されていることを確認するために迅速かつ汚い方法です。秘密はミューテックスを使用しています。

[STAThread] 
static void Main()     
{ 
    bool ok; 
    m = new System.Threading.Mutex(true, "YourNameHere", out ok); 

    if (!ok) 
    { 
     MessageBox.Show("Another instance is already running."); 
     return; 
    } 

    // Do some stuff here... 

    GC.KeepAlive(m);     
} 

このコードは、特定の名前のミューテックス(相互排他)を作成しようとすると、それは、このプログラムのインスタンスを、それを作成することができない場合は、すでに実行している必要があります。

+0

このコードは少しの作業が必要ですが、1つは放棄されたmutexを処理しません。 –

+0

ええ、そうです。あなたはミューテックスのWaitOneメソッドを呼び出すことができ、失敗した場合はAbandonedMutexExceptionエラーをキャッチして適切に処理します。それは本当に良い解決策でもありません。私が言ったように、それは速く汚れています。 :p – CalebHC

0
public Process[] ExistingProcesses()  
{ 
    string processName = Process.GetCurrentProcess().ProcessName; 
    Process[] processes = Process.GetProcessesByName(processName); 
    return processes; 
} 
1

本当に積極的で、おそらく最良のアイディアではありません。

おそらく、あなたはmaintain a single instance of your appしたいです。

+0

mutexソリューションの詳細については、リンク先をご覧ください。 –

0

実行可能ファイルの名前を変更して偶然にも敗れる可能性のあるプロセス名に依存するのではなく、既存のインスタンスをチェックする伝統的な方法は、ミューテックスなどの名前付きハンドルを持つことです。起動時に、すでに存在するかどうかをチェックし、存在する場合はすぐにシャットダウンします。私はもう一度質問を読んで、あなたが本当に新しいものを殺し、以前のインスタンスではなく殺したいように聞こえる

編集

。私が覚えることができるのは、新しいウィンドウを開き、古いウィンドウが開いたときにGoogle Chromeが何をするのかということですが、応答がないことを確認してからユーザーにプロンプ​​トを表示します。古いプロセスを強制終了するのは少し極端に聞こえます。あなたはそれがあなたがしたいことだと確信していますか?ここで

関連する問題