C#|二重起動を禁止してコマンドライン引数を取得する

C#のWindowsアプリケーションで二重起動を禁止するにはMutexを使う方法がある。
Mutexを使った方法では、後から起動されようとしたインスタンスのコマンドライン引数を、起動済みのインスタンスが受け取ることが出来ない。
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBaseを用いることで上記の問題を解決出来る。 Microsoft.VisualBasicをプロジェクトの参照に追加して次のようなクラスを用意する。

using System.IO;
using Microsoft.VisualBasic.ApplicationServices;

class myApplication:WindowsFormsApplicationBase{
  public myApplication()
    : base() {
    this.EnableVisualStyles = true;
    this.IsSingleInstance = true;
    this.MainForm = new Form1();//スタートアップフォームを設定
    this.StartupNextInstance += new StartupNextInstanceEventHandler(myApplication_StartupNextInstance);
  }
   void myApplication_StartupNextInstance(object sender, StartupNextInstanceEventArgs e) {
    //ここに二重起動されたときの処理を書く
    //e.CommandLineでコマンドライン引数を取得出来る
  }
}

 

上記のクラスは次の様にエントリポイントで使用する

using System;

static class Program {
  [STAThread]
  static void Main(string[] args) {
    //Application.EnableVisualStyles();
    //Application.SetCompatibleTextRenderingDefault(false);
    //Application.Run(new Form1());
    myApplication winAppBase = new myApplication();
    winAppBase.Run(args);
  }
}

 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください