C#で普通に作成したアプリケーションは、同じアプリケーションを複数起動する事が出来ます。
それが便利なケースもありますが、特定のファイルを自動更新するなどの処理がある場合、複数起動されると都合が悪い事もあります。
このような場合、Mutexクラスを使う事でアプリケーションが二重に起動しないよう制御する事が可能です。
Mutexオブジェクトを名前付きで作成する事でプロセス間での排他制御が可能になります。
第1引数はミューテックス作成時にその所有権を得るかどうかです。
trueを指定して所有権を得た場合は、最後に ReleaseMutexメソッドを呼び出して所有権を解放する必要があります。
この名前毎に排他制御が行われるのでアプリケーション毎に別々の名前を付ける必要があります。
第3引数によって、ミューテックスが新規に作成出来たか、既に同じ名前のミューテックスが存在するかを確認する事ができます。
Windowsでは複数のユーザーを切り替えて利用する事ができます。
上記の例では、ユーザーAさんが複数個のアプリを起動する事は出来なくなりましたが、
ユーザーAさんがアプリを起動した後ユーザーBさんに切り替えるとアプリが起動出来てしまいます。
また、別ユーザーが多重起動しようとした時にはコンストラクタで例外が発生するので するようにしましょう。
WPFアプリケーションで Mainメソッドを編集する為には以下を参照してください。