知識マップ: 使用中のexe/DLLをどう差し替えるか ── Restart Managerと自動更新の「ファイル使用中」問題

記事「使用中のexe/DLLをどう差し替えるか ── Restart Managerと自動更新の「ファイル使用中」問題」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

実行中のexe・ロード済みDLLはメモリマップドファイルとしてOSに保持されるため中身の書き換えと削除はブロックされ、これがインストーラーの「再起動が必要です」という要求の主因になる。Restart ManagerはRmGetListで占有アプリ・サービスを列挙し、RmShutdownで終了させ、RegisterApplicationRestartで登録済みのアプリだけをRmRestartで再起動させることでOS再起動の要求を減らし、Windows Installer 4.0以降のMSIはこれを自動的に利用する。LocalSystemのサービスは別のユーザーセッションのアプリを終了・再起動できないという制約があり、WTSQueryUserTokenでセッショントークンを取得する方法などで越える必要がある。ファイルの中身はロックされてもディレクトリ上の名前は変更できるため、rename-then-replaceパターンでプロセスを止めずに更新でき、それでも差し替えられない場合はMoveFileExの再起動時置換予約が最終手段になる。

Restart Managerとファイル使用中問題の知識マップ実行中exeがメモリマップドファイルとしてロックされる仕組み、Restart ManagerによるRmGetList・RmShutdown・RmRestartの流れとMSI統合、rename-then-replaceやMoveFileExの再起動時置換といった代替手段の関係を示す図原因になり得る原因になり得る軽減する軽減する利用する利用する利用する利用するで確認できる利用する利用するより先に行うべき前提とする推奨される対応防止する軽減する実装を担う利用する利用するに保存される推奨される対応推奨される対応Restart Manager使用中ファイルのロックrename-then-replaceパターンファイルマッピング(メモリマップトファイル)OS再起動の要求RmGetListRmShutdownRmRestartWindowsサービスWM_QUERYENDSESSIONWM_ENDSESSIONRegisterApplicationRestartセッション境界の制約WTSQueryUserTokenMSI(Windows Installer)インストーラーMSIとRestart Managerの統合MoveFileEx + MOVEFILE_DELAY_UNTIL_REBOOTPendingFileRenameOperations

概念間の関係(全22件)

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

主要概念の定義

Restart Manager
更新対象ファイルを使用中のアプリケーション・サービスを列挙し、終了と再起動までを行うWindows Vista以降のOS標準API群である。
使用中ファイルのロック
実行中のexeやロード済みDLLがメモリマップドファイルとしてOSに保持されるため、中身の書き換えと削除がブロックされる状態である。
rename-then-replaceパターン
実行中のファイルを退避名にリネームしてから新しいファイルを本来の名前で配置し、次回起動から新版を使わせる更新パターンである。
ファイルマッピング(メモリマップトファイル)
ファイルの内容をプロセスやシステムのアドレス空間にマップする仕組み。ディスク上のファイルに裏打ちされる形と、CreateFileMappingにINVALID_HANDLE_VALUEを渡してページファイルに裏打ちされる形(名前付き共有メモリ)がある。Windowsのキャッシュマネージャー自身の実装基盤でもある。
RmShutdown
Restart Managerのセッションに登録されたアプリケーション・サービスを終了させるAPI関数である。
WM_QUERYENDSESSION
終了してもよいかをアプリケーションに問い合わせる、Restart Managerが送るWindowsメッセージである。
RmRestart
RmShutdownで終了させたアプリケーションのうち、再起動登録済みのものを再起動させるRestart ManagerのAPI関数である。
RegisterApplicationRestart
アプリが自分自身の再起動用コマンドラインをOSに登録し、Restart Managerによる終了後に再起動させてもらうためのAPI関数である。
セッション境界の制約
LocalSystemで動くサービスが、ログオン中の別のユーザーセッションで動くアプリケーションを終了・再起動できないという制約である。
WTSQueryUserToken
セッションIDを指定してログオン中ユーザーのプライマリアクセストークンを取得する、高度に信頼されたサービス向けのAPI関数である。
MSI(Windows Installer)
Windowsの標準インストーラーパッケージ形式。ALLUSERSプロパティなどでインストール先の範囲を選べ、machine-wide installが一般的だがユーザー単位のインストールもできる。
MSIとRestart Managerの統合
Windows Installer 4.0以降のMSIがRestart Managerを自動的に使い、使用中ファイルのアプリを終了・再起動できるようにする仕組みである。
MoveFileEx + MOVEFILE_DELAY_UNTIL_REBOOT
プロセスを止められずrename-then-replaceも使えない場合に、OS再起動時のファイル移動・削除を予約するAPI呼び出しである。

機械可読データ

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