Exclusive flag の影響で更新プログラムが適用できない

Last Update: feedback 共有

※本記事はマイクロソフト社員によって公開されております。

事象の内容

Windows 10 以降、Windows Server 2016 以降の OS にて、更新プログラム適用後に再起動したにも関わらず、
更新プログラムの適用が完了できないケースが発生した場合、一部 Exclusive flag が有効なままになっているため、適用処理が中断されている可能性がございます。
本ブログでは、この事象の特徴と対処方法についてご説明いたします。

事象発生の確認方法

Exclusive Flag が有効化されていると、更新プログラム適用後の再起動中に、C:\Windows\Logs\CBS\CBS.log にて以下のようなログが出力されます。

1
2024-01-01 00:00:00, Info                  CBS    Exec: Some sessions are pended with exclusive flag set, forcing execution to be postponed on session:XXXXXXXX_XXXXXXXXXX

原因

更新プログラムの適用を排他制御するフラグが有効化されているため、更新プログラムの適用が妨げられている可能性があります。

キー名 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\SessionsPending

値の名前 : Exclusive

値の種類 : REG_DWORD

値 : 1 (有効)

なぜExclusive Flagが有効化されたままなのか

本来 Exclusive Flag は更新プログラムを適用する際に重複して適用されることを回避するために一時的に有効化され、
更新プログラム適用後に無効化されるのが期待動作です。なぜ有効化されたままの状態であるかを調査するには
レジストリが有効化された瞬間を捉える必要があるため、残念ながら、既に有効化された環境においては、原因を調査することが困難です。
弊社過去事例におきましては、強制シャットダウンの実施でフラグの有効化が発生したケースがございました。

対処方法

Exclusive flag を 0 (無効化)することで事象の回避が可能になります。
なお Windows 10 1809 まではアクセス権の変更が必要ですが、Windows 10 1903 以降は Exclusive flag についてアクセス権の変更は不要です。
Windows 10 1903 以降の環境の場合は、手順 2 のみを実施ください。

手順 1 アクセス権の変更

  1. レジストリ エディター (regedit) を起動します。

  2. 下記のレジストリキーを展開します。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing

  3. Component Based Servicing キーを右クリックし、[アクセス許可] を押下します。

  4. “Component Based Servicing のアクセス許可” ウインドウが開きましたら、[詳細設定] を押下します。

  5. [Component Based Servicing のセキュリティの詳細設定] ウインドウの [所有者:] の横の [変更] を押下し、[選択するオブジェクト名を入力してください] にて Administrators と入力し、[OK] を押下します。

  6. [サブコンテナーとオブジェクトの所有者を置き換える] にチェックを入れ、[適用] および [OK]を押下します。

  7. “Component Based Servicing のアクセス許可” ウインドウに戻りましたら、[グループ名またはユーザー名] の一覧にて Administrators を選択し、[アクセス許可] にて [フル コントロール] にチェックを入れ、[適用] および [OK] を押下します。

手順 2 Exclusive Flagの無効化

  1. レジストリ エディター (regedit) で下記のキーを展開します。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\SessionsPending

  2. “SessionsPending” キーの右側のペインにある [Exclusive] 値をダブル クリックします。

  3. [値のデータ] を 1 から 0 に変更し、[OK] を押下します。

手順 3 アクセス権を元に戻します

  1. レジストリ エディター (regedit) を起動します。

  2. 下記のレジストリキーを展開します。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing

  3. “Component Based Servicing” キーを右クリックし、[アクセス許可] を押下します。

  4. “Component Based Servicing のアクセス許可” ウインドウの [グループ名またはユーザー名] の一覧にて Administrators を選択し、[読み取り] 以外のチェックを外します。

  5. “Component Based Servicing のアクセス許可” ウインドウの [詳細設定] を押下します。

  6. [Component Based Servicing のセキュリティの詳細設定] ウインドウの [所有者:] の横の [変更] を押下します。

  7. [ユーザーまたはグループの選択] ウインドウにて、[選択するオブジェクト名を入力してください] にて NT SERVICE\TrustedInstaller と入力し、[OK] を押下します。
    なお、[場所の指定 (F)] で表示されている場所が、ローカル コンピューター名でなくドメインだった場合は、予め [場所] を押下し、ローカル コンピューター名を選択します。

  8. [サブコンテナーとオブジェクトの所有者を置き換える] にチェックを入れてから、[適用] および [OK] を押下します。

  9. “Component Based Servicing のアクセス許可” ウインドウに戻りましたら、[OK] を押下し、開いているウインドウをすべて閉じます。

上記手順を実施後に改めて更新プログラムの適用を実施ください。