C#二重起動を禁止する

スポンサーリンク

二重起動 (多重起動) を防止するのには、いくつかの方法が考えられます。ここで紹介する方法は、同名のプロセスが起動していないかどうかをチェックする方法です。これは、旧 VB での App.PrevInstance プロパティを調べる方法と似ています。

そのため、実行ファイル名を変更されると別プロセス扱いになる という弱点が同様にあり確実とは言えません。(App.PrevInstance は 実行ファイルまでのパス + 実行ファイル名 で判断していました)

確実に二重起動を防止したい場合は 二重起動を確実に禁止する をご覧ください。

サンプルコード

以下にサンプルコードを示します。

C# 全般
/// ---------------------------------------------------------------------------
/// <summary>
///    同名のプロセスが起動しているかどうかを示す値を返します。</summary>
/// <returns>
///    同名のプロセスが起動中の場合は true。それ以外は false。</returns>
/// ---------------------------------------------------------------------------
public static bool PrevInstance() {
    // このアプリケーションのプロセス名を取得
    string stThisProcess = System.Diagnostics.Process.GetCurrentProcess().ProcessName;

    // 同名のプロセスが他に存在した場合は、既に起動していると判断する
    if (System.Diagnostics.Process.GetProcessesByName(stThisProcess).Length > 1) {
        return true;
    }

    // 存在しない場合は False を返す
    return false;
}

使用例は以下のようになります。

C# 全般
[STAThread()]
private static void Main() {
    // 同名のプロセスが起動していない時は起動する
    if (! PrevInstance()) {
        Application.Run(new Form1());

    // 既に起動中である旨を表示 (推奨しません)
    //} else {
    //    MessageBox.Show("既に起動中です");
    }
}

関連するリファレンス

準備中です。

スポンサーリンク