2009-06-05 12 views
1

私はC#コンソールアプリケーションを書いています。スケジュールされたタスクとして実行されます。私のプログラムがWindowsで実行されているかどうかを検出するには?

以前のスケジュールタスクの実行から別のプロセスがまだ実行されていることがわかったら、EXEをすぐに終了します。

私のアプリにアクティブなプロセスを検出させる方法が見つからず、すでに実行中であるかどうかがわかりません。

ありがとうございます。 Peter

+0

http://www.sanity-free.org/143 /csharp_dotnet_single_instance_application.html –

答えて

12

非常に一般的な手法の1つは、プロセスの開始時にミューテックスを作成することです。ミューテックスを作成できない場合、別のインスタンスが実行中であることを意味します。

これはネイサンのリンクからサンプルです:

//Declare a static Mutex in the main form or class... 
private static Mutex _AppMutex = new Mutex(false, "MYAPP"); 

// Check the mutex before starting up another possible instance 
[STAThread] 
static void Main(string[] args) 
{ 
    if (MyForm._AppMutex.WaitOne(0, false)) 
    { 
    Application.Run(new MyForm()); 
    } 
    else 
    { 
    MessageBox.Show("Application Already Running"); 
    } 
    Application.Exit(); 
} 
+0

ここにリンクがあります。おそらく、tekBluesがコードサンプルの回答を更新する可能性があります。 http://www.programmersheaven.com/mb/csharp/209938/209938/how-can-i-check-if-my-application-is-already-running/?S=B20000注:私はこれをテストしていませんサンプル。 –

+1

mutexは、プロセスを調べる権限を持っていない可能性があるので、プロセスを検査するよりも良いオプションですが、mutexを気にする必要はありません –

+0

これを行うには、100%あなたのアプリがロックすることができないことを確かめてください、そうでなければあなた自身がDOSで終わるでしょう –

0

は、プロセスをチェックするたSystem.Diagnosticsで何かがそこにはありませんか?

編集:これらのリンクのいずれかが役立ちますか?彼らがどのように役立つのかがわかります。

私は、私にできることすべてはあなたに他の項目へのリンクを提供していることを残念です。私はSystem.Diagnosticsを使用する必要はありませんでしたが、うまくいけばあなたや他の人を助けてくれるかもしれません。

1

が System.Diagnostics.Process

getProcesses()

1

使用ミューテックスを試してみてください。

// Allow only one instance of app 
// See http://www.yoda.arachsys.com/csharp/faq/#one.application.instance 
bool firstInstance; 
_mutex = new Mutex(false, "Local\\[UniqueName]", out firstInstance); 

Link to reference in comment

+0

ありがとう、それはとても簡単でした! (これは私がこの時点で扱うことができるすべてです) –

関連する問題