@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/restart-manager-file-in-use-update-guide/#article>
    schema:about <https://comcomponent.com/knowledge/restart-manager/>, <https://comcomponent.com/knowledge/file-lock-in-use/>, <https://comcomponent.com/knowledge/rename-then-replace/> ;
    schema:mentions <https://comcomponent.com/knowledge/windows-service/>, <https://comcomponent.com/knowledge/installer/>, <https://comcomponent.com/knowledge/msi/>, <https://comcomponent.com/knowledge/memory-mapped-file/>, <https://comcomponent.com/knowledge/rm-get-list/>, <https://comcomponent.com/knowledge/rm-shutdown/>, <https://comcomponent.com/knowledge/rm-restart/>, <https://comcomponent.com/knowledge/register-application-restart/>, <https://comcomponent.com/knowledge/wm-queryendsession/>, <https://comcomponent.com/knowledge/wm-endsession/>, <https://comcomponent.com/knowledge/movefileex-delay-until-reboot/>, <https://comcomponent.com/knowledge/pending-file-rename-operations/>, <https://comcomponent.com/knowledge/msi-restart-manager-integration/>, <https://comcomponent.com/knowledge/session-boundary-restriction/>, <https://comcomponent.com/knowledge/wts-query-user-token/>, <https://comcomponent.com/knowledge/reboot-required-prompt/> .

<https://comcomponent.com/knowledge/restart-manager/> a skos:Concept ;
    skos:prefLabel "Restart Manager"@ja ;
    skos:definition "更新対象ファイルを使用中のアプリケーション・サービスを列挙し、終了と再起動までを行うWindows Vista以降のOS標準API群である。"@ja ;
    skos:altLabel "rstrtmgr.dll" ;
    skos:altLabel "リスタートマネージャー"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/reboot-required-prompt/> ;
    ks:uses <https://comcomponent.com/knowledge/rm-get-list/> ;
    ks:uses <https://comcomponent.com/knowledge/rm-shutdown/> ;
    ks:uses <https://comcomponent.com/knowledge/rm-restart/> ;
    ks:uses <https://comcomponent.com/knowledge/windows-service/> .

<https://comcomponent.com/knowledge/file-lock-in-use/> a skos:Concept ;
    skos:prefLabel "使用中ファイルのロック"@ja ;
    skos:definition "実行中のexeやロード済みDLLがメモリマップドファイルとしてOSに保持されるため、中身の書き換えと削除がブロックされる状態である。"@ja ;
    skos:altLabel "ファイル使用中"@ja ;
    skos:altLabel "共有違反"@ja ;
    skos:altLabel "ファイル使用中ロック(削除・差し替え不可)"@ja ;
    skos:altLabel "ファイルが使用中"@ja ;
    skos:altLabel "ファイルが削除できない"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/reboot-required-prompt/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/rm-get-list/> .

<https://comcomponent.com/knowledge/rename-then-replace/> a skos:Concept ;
    skos:prefLabel "rename-then-replaceパターン"@ja ;
    skos:definition "実行中のファイルを退避名にリネームしてから新しいファイルを本来の名前で配置し、次回起動から新版を使わせる更新パターンである。"@ja ;
    skos:altLabel "リネーム置換更新"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/file-lock-in-use/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/reboot-required-prompt/> .

<https://comcomponent.com/knowledge/memory-mapped-file/> a skos:Concept ;
    skos:prefLabel "ファイルマッピング(メモリマップトファイル)"@ja ;
    skos:definition "ファイルの内容をプロセスやシステムのアドレス空間にマップする仕組み。ディスク上のファイルに裏打ちされる形と、CreateFileMappingにINVALID_HANDLE_VALUEを渡してページファイルに裏打ちされる形(名前付き共有メモリ)がある。Windowsのキャッシュマネージャー自身の実装基盤でもある。"@ja ;
    skos:altLabel "File Mapping" ;
    skos:altLabel "メモリマップトファイル"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/file-lock-in-use/> .

<https://comcomponent.com/knowledge/reboot-required-prompt/> a skos:Concept ;
    skos:prefLabel "OS再起動の要求"@ja ;
    skos:definition "更新対象ファイルが使用中であることを理由に、インストーラーやOSがシステムの再起動を求めることである。"@ja ;
    skos:altLabel "再起動が必要です"@ja .

<https://comcomponent.com/knowledge/rm-get-list/> a skos:Concept ;
    skos:prefLabel "RmGetList"@ja ;
    skos:definition "Restart Managerに登録したリソースを使用中のアプリケーション・サービスの一覧を取得するAPI関数である。"@ja ;
    skos:altLabel "RmGetList function" .

<https://comcomponent.com/knowledge/rm-shutdown/> a skos:Concept ;
    skos:prefLabel "RmShutdown"@ja ;
    skos:definition "Restart Managerのセッションに登録されたアプリケーション・サービスを終了させるAPI関数である。"@ja ;
    skos:altLabel "RmShutdown function" ;
    ks:uses <https://comcomponent.com/knowledge/wm-queryendsession/> ;
    ks:uses <https://comcomponent.com/knowledge/wm-endsession/> .

<https://comcomponent.com/knowledge/rm-restart/> a skos:Concept ;
    skos:prefLabel "RmRestart"@ja ;
    skos:definition "RmShutdownで終了させたアプリケーションのうち、再起動登録済みのものを再起動させるRestart ManagerのAPI関数である。"@ja ;
    skos:altLabel "RmRestart function" .

<https://comcomponent.com/knowledge/windows-service/> a skos:Concept ;
    skos:prefLabel "Windowsサービス"@ja ;
    skos:definition "ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。"@ja ;
    skos:altLabel "サービス"@ja .

<https://comcomponent.com/knowledge/wm-queryendsession/> a skos:Concept ;
    skos:prefLabel "WM_QUERYENDSESSION"@ja ;
    skos:definition "終了してもよいかをアプリケーションに問い合わせる、Restart Managerが送るWindowsメッセージである。"@ja ;
    skos:altLabel "ENDSESSION_CLOSEAPP" ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/wm-endsession/> .

<https://comcomponent.com/knowledge/wm-endsession/> a skos:Concept ;
    skos:prefLabel "WM_ENDSESSION"@ja ;
    skos:definition "実際の終了をアプリケーションに指示する、WM_QUERYENDSESSIONに続いて送られるWindowsメッセージである。"@ja .

<https://comcomponent.com/knowledge/register-application-restart/> a skos:Concept ;
    skos:prefLabel "RegisterApplicationRestart"@ja ;
    skos:definition "アプリが自分自身の再起動用コマンドラインをOSに登録し、Restart Managerによる終了後に再起動させてもらうためのAPI関数である。"@ja ;
    skos:altLabel "RegisterApplicationRestart function" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/reboot-required-prompt/> .

<https://comcomponent.com/knowledge/session-boundary-restriction/> a skos:Concept ;
    skos:prefLabel "セッション境界の制約"@ja ;
    skos:definition "LocalSystemで動くサービスが、ログオン中の別のユーザーセッションで動くアプリケーションを終了・再起動できないという制約である。"@ja ;
    skos:altLabel "セッション0分離"@ja .

<https://comcomponent.com/knowledge/wts-query-user-token/> a skos:Concept ;
    skos:prefLabel "WTSQueryUserToken"@ja ;
    skos:definition "セッションIDを指定してログオン中ユーザーのプライマリアクセストークンを取得する、高度に信頼されたサービス向けのAPI関数である。"@ja ;
    skos:altLabel "WTSQueryUserToken function" .

<https://comcomponent.com/knowledge/msi/> a skos:Concept ;
    skos:prefLabel "MSI(Windows Installer)"@ja ;
    skos:definition "Windowsの標準インストーラーパッケージ形式。ALLUSERSプロパティなどでインストール先の範囲を選べ、machine-wide installが一般的だがユーザー単位のインストールもできる。"@ja ;
    skos:altLabel "Windows Installer" ;
    skos:altLabel "MSI" ;
    ks:implements <https://comcomponent.com/knowledge/installer/> ;
    ks:uses <https://comcomponent.com/knowledge/restart-manager/> .

<https://comcomponent.com/knowledge/installer/> a skos:Concept ;
    skos:prefLabel "インストーラー"@ja ;
    skos:definition "管理者権限で動作し、アプリの配置と関連設定を行う導入プログラム。"@ja ;
    skos:altLabel "セットアップ"@ja .

<https://comcomponent.com/knowledge/msi-restart-manager-integration/> a skos:Concept ;
    skos:prefLabel "MSIとRestart Managerの統合"@ja ;
    skos:definition "Windows Installer 4.0以降のMSIがRestart Managerを自動的に使い、使用中ファイルのアプリを終了・再起動できるようにする仕組みである。"@ja ;
    skos:altLabel "MsiRMFilesInUseダイアログ"@ja ;
    skos:broader <https://comcomponent.com/knowledge/installer/> ;
    ks:uses <https://comcomponent.com/knowledge/restart-manager/> .

<https://comcomponent.com/knowledge/movefileex-delay-until-reboot/> a skos:Concept ;
    skos:prefLabel "MoveFileEx + MOVEFILE_DELAY_UNTIL_REBOOT"@ja ;
    skos:definition "プロセスを止められずrename-then-replaceも使えない場合に、OS再起動時のファイル移動・削除を予約するAPI呼び出しである。"@ja ;
    skos:altLabel "再起動時置換予約"@ja ;
    ks:storedIn <https://comcomponent.com/knowledge/pending-file-rename-operations/> .

<https://comcomponent.com/knowledge/pending-file-rename-operations/> a skos:Concept ;
    skos:prefLabel "PendingFileRenameOperations"@ja ;
    skos:definition "MOVEFILE_DELAY_UNTIL_REBOOTによる置換・削除の予約が書き込まれる、HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager配下のレジストリ値である。"@ja ;
    skos:altLabel "再起動時操作の予約レジストリ"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/memory-mapped-file/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/file-lock-in-use/> ;
    schema:description "実行中のexeやロード済みDLLはメモリマップドファイル(イメージセクション)としてOSに保持されるため、更新対象ファイルが実行中のアプリ・サービスに使用されていると中身の書き換え・削除がブロックされる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rstmgr/about-restart-manager> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/file-lock-in-use/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/reboot-required-prompt/> ;
    schema:description "インストールや更新がシステム再起動を要求する主な理由は、更新対象ファイルが実行中のアプリケーションやサービスに使用されていることである"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rstmgr/about-restart-manager> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/rename-then-replace/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/file-lock-in-use/> ;
    schema:description "ファイルの中身はロックされていてもディレクトリ上の名前は変更できるため、実行中でも同一ボリューム内のリネームは成功し、新版への差し替えに使える"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-movefilew> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/restart-manager/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/reboot-required-prompt/> ;
    schema:description "Restart Managerは、重要なもの以外のアプリ・サービスを終了・再起動させることでOS再起動の要求を減らすか不要にする。ただし重要なシステムサービスやクリティカルプロセスは対象外で、その場合はOS再起動が必要という判定が返る"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rstmgr/about-restart-manager> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/restart-manager/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/rm-get-list/> ;
    schema:description "Restart Managerは、RmGetListで登録済みリソースを使用中のアプリ・サービスを列挙する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/restartmanager/nf-restartmanager-rmgetlist> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/restart-manager/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/rm-shutdown/> ;
    schema:description "Restart Managerは、RmShutdownで列挙したアプリ・サービスを終了させる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/restartmanager/nf-restartmanager-rmshutdown> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/restart-manager/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/rm-restart/> ;
    schema:description "Restart Managerは、更新後にRmRestartで再起動登録済みのアプリを再起動させる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rstmgr/about-restart-manager> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/restart-manager/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/windows-service/> ;
    schema:description "Restart Managerは、GUIアプリだけでなくWindowsサービスも列挙・終了・再起動の対象にする"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rstmgr/about-restart-manager> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/file-lock-in-use/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/rm-get-list/> ;
    schema:description "あるファイルを誰が掴んでいるかは、RmGetListが返すプロセス・サービスの一覧で確認できる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/restartmanager/nf-restartmanager-rmgetlist> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/rm-shutdown/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/wm-queryendsession/> ;
    schema:description "RmShutdownはGUIアプリに対し、まずWM_QUERYENDSESSIONを送って終了してよいかを問い合わせる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rstmgr/guidelines-for-applications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/rm-shutdown/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/wm-endsession/> ;
    schema:description "RmShutdownは実際の終了指示としてWM_ENDSESSIONを送る"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rstmgr/guidelines-for-applications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wm-queryendsession/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/wm-endsession/> ;
    schema:description "アプリはWM_QUERYENDSESSIONに応答してもまだ終了せず、実際の終了はその後に届くWM_ENDSESSIONで行うべきである"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/rstmgr/guidelines-for-applications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/rm-restart/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/register-application-restart/> ;
    schema:description "通常のアプリケーションを再起動する場合、RmRestartが再起動できるのはRegisterApplicationRestartで再起動コマンドラインを登録済みのアプリだけである。Restart Managerが停止したWindowsサービスは、この登録ではなくサービス制御の仕組みで再開される。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-registerapplicationrestart> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/register-application-restart/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/reboot-required-prompt/> ;
    schema:description "起動直後にRegisterApplicationRestartで再起動コマンドラインを登録しておくことが、再起動が必要ですという要求を減らすための推奨実装である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-registerapplicationrestart> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/session-boundary-restriction/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/restart-manager/> ;
    schema:description "LocalSystemのサービスとして動くRestart Managerのセッションは、他のユーザーセッションで動くアプリケーションの終了・再起動を行えない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/restartmanager/nf-restartmanager-rmshutdown> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wts-query-user-token/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/session-boundary-restriction/> ;
    schema:description "WTSQueryUserTokenで対象セッションのユーザートークンを取得しCreateProcessAsUserで起動すれば、セッション境界の制約を越えて対象セッション内にプロセスを置ける"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/wtsapi32/nf-wtsapi32-wtsqueryusertoken> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msi/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/installer/> ;
    schema:description "Windows Installer(MSI)は、Windowsでのインストーラーの代表的な実装である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/msi/windows-installer-portal> ;
    ks:verifiedAt "2026-08-02" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msi/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/restart-manager/> ;
    schema:description "Windows Installer 4.0以降のMSIインストーラーはRestart Managerを自動的に使う"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/msi/using-windows-installer-with-restart-manager> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/msi-restart-manager-integration/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/restart-manager/> ;
    schema:description "MSIとRestart Managerの統合は、MsiRMFilesInUseダイアログの追加とプロパティによる挙動制御を通じてRestart Managerを利用する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/msi/using-windows-installer-with-restart-manager> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/movefileex-delay-until-reboot/> ;
    rdf:predicate ks:storedIn ;
    rdf:object <https://comcomponent.com/knowledge/pending-file-rename-operations/> ;
    schema:description "MoveFileExによるOS再起動時の置換・削除予約は、レジストリのPendingFileRenameOperationsに書き込まれる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-movefileexw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/movefileex-delay-until-reboot/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/file-lock-in-use/> ;
    schema:description "プロセスをどうしても止められずrename-then-replaceも使えない場合の最終手段として、OS再起動時の置換を予約する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-movefileexw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/rename-then-replace/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/reboot-required-prompt/> ;
    schema:description "常駐型・長時間稼働型の業務アプリでは、rename-then-replaceによりプロセスを止めずに次回起動から新版へ切り替える更新が、再起動要求を避ける手段として推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-movefilew> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
