知識マップ: Windowsアプリの多重起動防止 ── 名前付きMutexと二重起動時のアクティブ化

記事「Windowsアプリの多重起動防止 ── 名前付きMutexと二重起動時のアクティブ化」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

Windowsアプリの多重起動防止は、名前付きMutexの新規作成に成功したかを判定条件として利用する設計が基本です。Mutexはプレフィックスを付けないと既定でセッション限定のLocal名前空間に作られるため、リモートデスクトップで複数セッションを持つ環境では、Globalプレフィックスとユーザー識別子を組み合わせないと意図した単位で多重起動を防げません。ACLを明示したMutexは名前の占有を防げる一方、作成時と異なる昇格レベルでは生成・オープン自体が拒否されることがあります。検出後は名前付きパイプで通知し、AllowSetForegroundWindowで権限を委譲したうえでSetForegroundWindowを呼ぶ設計が、既存インスタンスを前面化する定石です。

Windowsアプリの多重起動防止の知識マップ名前付きMutexによる多重起動検出が、カーネルオブジェクト名前空間の選び方・ACLによる保護・既存インスタンスの前面化手段とどう関係するかを示す図利用する利用する前提とする両立しない防止する前提とする前提とするで構成できる利用するで確認できる前提とする前提とする前提とする利用する利用する両立しないで確認できる原因になり得るで構成できる名前付きMutex多重起動防止(シングルインスタンス化)カーネルオブジェクト名前空間(Global\/Local\)MutexSecurity/ACLによるMutex保護管理者権限Mutexの名前占有(スクワッティング).NET(Core以降)PipeOptions.CurrentUserOnly整合性レベル名前付きパイプGetNamedPipeServerProcessIdAllowSetForegroundWindowSetForegroundWindowタスクスケジューラの無人実行WinObjAbandonedMutexException

概念間の関係(全19件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

名前付きMutex
名前を指定して作成し、その名前を知っている他のプロセスからも同じインスタンスを参照できる、相互排他用のWindowsカーネルオブジェクト。
多重起動防止(シングルインスタンス化)
同一アプリケーションの起動を、セッション・ユーザー・マシンなど選んだ単位で1つに制限する設計。
MutexSecurity/ACLによるMutex保護
名前付きMutexの作成時にACLを明示し、自分が先に作成できた場合に他ユーザーによる乗っ取り・不正保持を防ぐ設定。
PipeOptions.CurrentUserOnly
名前付きパイプへの接続を、現在のユーザー(かつ同じ昇格レベル)に限定する.NETのアクセス制御オプション。
名前付きパイプ
Windowsのプロセス間通信手段のひとつ。リモートからの利用はアプリ自身のポートではなくSMB(TCP 445)を経由する。
GetNamedPipeServerProcessId
接続済みの名前付きパイプのクライアント側ハンドルから、サーバー側プロセスのプロセスIDを取得するWin32 API。
AllowSetForegroundWindow
フォアグラウンドウィンドウを設定できる権限を、プロセスIDで指定した相手プロセスへ譲渡するWin32 API。
SetForegroundWindow
指定したウィンドウをフォアグラウンドに設定するWin32 API。呼び出し元プロセスが定められた条件を満たさない限り、実際には前面化せずタスクバーボタンの点滅に留まる。
タスクスケジューラの無人実行
指定したアカウントで、スケジュールやログオンなどのトリガーに従いプログラムを実行するWindowsの仕組み。ログオン種別(対話トークン・パスワード保存・S4Uなど)の設定によっては、ユーザーがログオンしていなくても実行できる。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。