プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

C++/CLIでアプリの多重起動を禁止する。

f:id:paveway:20190914064630j:plain

はじめに

今回の仕事で作成したアプリが多重起動禁止という仕様でした。
アプリの多重起動のチェック方法を知りませんでしたが、その時一緒に作業をしている人がその方法を教えてくれたので、まとめてみました。

多重起動を禁止する方法

多重起動かどうかチェックするような便利なAPIはないようです。
そのため次の手順でチェックしました。

①このアプリのプロセス名を取得します。
②そのプロセス名のプロセスを取得します。
③このアプリと同じ名前のプロセスが存在すれば、すでにアプリが起動しているとみなします。存在していなければ、アプリが起動していないとします。

///
/// アプリが起動済みかチェックします。
/// @return true:起動していない / false:起動済み
///
bool IsStarted()
{
    // このアプリのプロセス名を取得します。
    String^ processName = System::Diagnostics::Process::GetCurrentProcess()->ProcessName;
        
    // このアプリのプロセス名と同じプロセスが存在する場合
    if (System::Diagnostics::Process::GetProcessesByName(myAppName)->Length > 1)
    {
        // 起動済みとします。
        return false;
    }
        
    // このアプリのプロセス名と同じプロセスが存在しない場合、起動していないとします。
    return true;
}

API Reference
ProcessNameプロパティ
GetProcessesByNameメソッド

おわりに

こういったシステム固有の処理は、プログラムを知っているだけでは、なかなかわからないです。勉強になります。
その後ちょっとネットで調べてみましたが、この方法だと実行ファイル名を変更すると多重起動できてしまうようです。 今回の要件でそういった状況は考えにくいため、この方法で実装しました。 確実に多重起動を禁止する方法は、今度調べてみたいと思います。

Googleアナリティクスの人気オンライン講座