アプリケーションの二重起動を抑止する - C#
概要
C#でアプリケーションの二重起動をさせないコードを紹介します。
常駐ソフトなどでは、アプリケーションを二つ以上起動させたくない場合があります。ミューテックスを利用することで多重起動を抑止できます。
C#の Windows フォームアプリケーションでは、Progarm.csファイルのMain()関数内にミューテックスの処理を記述することで実現できます。
記述例
下記のコードを Program.cs の main()関数内に記述します。
//ミューテックス作成
_mutex = new System.Threading.Mutex(false, "MYSOFTWARE_001");
//ミューテックスの所有権を要求する
if (_mutex.WaitOne(0, false) == false) {
MessageBox.Show("本ソフトウェアは複数起動できません。");
return;
}
プログラム例
Windowsフォームアプリケーションを作成します。
UI
下図のUIを作成します。フォームにLabelを配置します。
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace SingleApplicationExecute
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
//ミューテックス作成
Mutex app_mutex = new Mutex(false, "MYSOFTWARE_001");
//ミューテックスの所有権を要求する
if (app_mutex.WaitOne(0, false) == false) {
MessageBox.Show("このアプリケーションは複数起動できません。");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
}
}
フォームのコードには追加の記述はありません。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SingleApplicationExecute
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
}
}
実行結果
今回は複数の起動をテストするため、デバッガではなく実行ファイルを直接起動します。ビルド結果が保存されているディレクトリを開き、プログラムを起動します。
プログラムが起動し、下図のウィンドウが表示されます。
1つ目のプログラムが起動している状態で、実行ファイルをダブルクリックし、2つ目のプログラムを起動します。
プログラムを起動すると、下図の「このアプリケーションは複数起動できません。」のメッセージボックスが表示され、プログラムの起動はできません。
アプリケーションを2重に起動しようとすると、警告ダイアログが表示されアプリケーションの起動が抑止される動作を実装できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用