2016-04-20 8 views
-1

私はMutexを使用して、Microsoft Wordが現在ログインしているユーザーセッションでコンピュータで実行されているかどうかを知るために使用できるかどうかを理解していました。私は以下の例を試したが、どれも働いていなかった。.NETでログインしているユーザーセッションでMS Wordが実行されているかどうかを確認するためにmutexを使用できますか?

Ex1の:

using (Mutex mutex = new Mutex(false, "WINWORD.exe")) 
{ 
    if (mutex.WaitOne(0, false)) 
    { 
     Console.WriteLine("Not running"); //Always printing     
    } 
    else 
    { 
     Console.WriteLine("Already running"); 
    } 
} 

Ex2の:

bool createdNew; 
Mutex m = new Mutex(false, "WINWORD.exe", out createdNew); 
if (createdNew) 
{ 
    Console.WriteLine("Not running"); //Always printing 
} 
else 
{ 
    Console.WriteLine("Already running"); 
} 

例の両方で、私は私のコンピュータで実行されているでWordを見ることができますが、それは、 "実行していない" の印刷です。ミュテックスの限界ですか?または私はここに何かを逃していますか?

+2

これはジョブの間違ったツール(nvoitの回答が示しているように)以外に、あなたが実際に答える必要がある質問も考慮する必要があります。 Wordがこのマシン*で実行されているかどうか気になりますか、Wordが同じセッションで実行されているかどうか注意してください*。 Windowsは複数のユーザーがプログラムを実行してログインしていることをサポートしていますが、ユーザーAとしてログインしているときにWordがユーザーBに対して実行されていることを確認するにはかなりのアクセス許可が必要であり、b)あなたの全体的な問題(それはどういう意味ですか?) –

+0

こんにちはDamien、私は同じセッションで単語が実行されている場合気にします。質問も更新されました。 –

+0

こんにちはDamien、私はタイトルを更新した後、あなたが投票を元に戻すことを願っています。 –

答えて

4

mutexは、別のプログラムが既に実行されているかどうかを確認するために使用されません。それが唯一の当事者によるMUT ually clusiveを所有することができ、それを解放するために、他のパーティーのために待っていたことができますので、

ミューテックスは、複数のタスク(マルチスレッドやマルチプロセッシングのいずれか)に役立つ要素であり、 。

あなたあなた自身のプログラム間の単純なはい/いいえ文を伝えないようにミューテックスを使用することができます。最初に起動したmutexと他のものは、既に他の誰かが所有しているのを見て、同じプログラムがすでに起動していることを知っています。おそらくあなたのコードがうまくいくと信じるようになったのでしょう。しかし、それはすべてのプログラムがそれをサポートしている場合にのみ機能します。あなたが見た例は、自身のプログラムがすでに実行されているかどうかを常にチェックしていました。

+0

答えにnvoigtを感謝します。つまり、自分のプログラムの別のインスタンス(同じexe)が実行されているかどうかを確認するためにMutexを使用できますか? Wordが既に実行されているかどうかを確認するには、Wordのコードを同時に実行する必要があります。私が間違っていれば私を修正してください。 –

+0

ミューテックスがすでに使用されているかどうかだけを確認できます。したがって、両方のプログラムのコードにアクセスできるときは、ミューテックスを使用して、そのうちの1つが実行中であることを伝えることができます。 Wordはあなたの製品ではなく、あなたが選んだミューテックスを使用するようにMicrosoftにコードを変更させることはできないため、Wordがmutexで動作しているかどうかを確認する方法はありません。 – nvoigt

関連する問題