Feature Update 実行後に、アプリケーションに必要なレジストリが移行されない事象について

Last Update: feedback 共有

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

Feature Update 実行後に、個別に開発したアプリケーションなどにおいて、必要としているレジストリが移行されない事象についてご説明いたします。

概要

Windows 10 の Feature Update 実行時に、個別に開発したアプリケーションなどにおいて、必要としているレジストリが移行されない事象や新しい値に上書きされる事象が発生する可能性があり、このような事象が発生した場合、Feature Update 実行後に、移行されなかったアプリケーションで必要とするレジストリを別途作成する対処が必要となります。

発生環境と発生タイミング

Windows 10の環境で、Feature Update を実行した後

※ Windows 10 LTSC (LTSB) は、Feature Update の適用対象外となるため該当しません。

発生要因

Feature Update 時の移行処理の動作として、内部的に複数のマニュフェスト ファイルが存在しており、各マニュフェストの内容に基づいて、移行処理が行われております。
Feature Update 実行後に、個別に開発したアプリケーションなどに必要なレジストリが移行されない場合、この移行処理において、当該のレジストリがマニフェストを基にした移行処理に含められていなかったことが要因となります。
(移行されなかった情報は、システム ドライブ直下の Windows.old (既定では、C:\Windows.old) フォルダー内に一定期間、保持されるような動作となります。)

基本的な動作として可能な限り、OS として必要な情報が移行されるよう設計されておりますが、弊社製品上、想定されない形式で記録されているキーなど独自の方式で実装されている場合には、移行対象から外れるケースや新しい OS バージョンにおいて、新しいキーに置き換えられるようなケース (古い情報が刷新されるケース) において設定値が削除されたり、上書きされるケースもございます。

対処方法

Feature Update 実行後に、ドメインのグループ ポリシーやスクリプトの実行、アプリケーションの
修復インストールなどを実施いただき、レジストリを再構成いただく必要がございます。

レジストリ復元 (例)

Windows.old 内のレジストリ情報から復元する場合、保存されているハイブ ファイルからレジストリの復元を行う必要がございます。
以下にレジストリを復元するためのサンプル コマンドなどをご紹介します。

  • アップグレード前のレジストリの保存先

    HKLM\SOFTWARE : “C:\Windows.old\Windows\System32\config\SOFTWARE”

    HKLM\SYSTEM : “C:\Windows.old\Windows\System32\config\SYSTEM”

    ※ 拡張子無しのファイルとして保管されています。

  • 復元の流れ

    今回は、”HKLM\SOFTWARE” 配下のレジストリを例として復元する流れを記載しております。
    “SOFTWARE” を “SYSTEM” に変更いただければ、”HTLM\SYSTEM” 配下のレジストリを復元することも可能です。
    弊社環境では復元可能であることを確認しておりますが、お客様の環境で、十分検証いただくことをお勧めいたします。


  1. アップグレード前のレジストリ ハイブ ファイルを一時的に “HKLM\BackupHive” キーとして読み込みます。

    reg load HKLM\BackupHive “C:\Windows.old\Windows\System32\config\SOFTWARE”

  2. アップグレード前の “HKLM\SOFTWARE\Classes\Interface” 配下の任意の GUID のレジストリ情報を “C:\Temp” フォルダーにエクスポートします。

    reg export “HKLM\BackupHive\Classes\Interface{<任意の GUID>}” “C:\Temp\Interface.txt”

  3. 一時的に作成した “HKLM\BackupHive” をアンロードします。

    reg unload HKLM\BackupHive

  4. [コマンド プロンプト] から PowerShell に切り替えます。

    PowerShell

  5. “2” でエクスポートしたレジストリの情報のパスを復元用に書き換えます。

    Get-Content C:\Temp\Interface.txt | % { $_ -replace “BackupHive”, “SOFTWARE” } | Out-File C:\Temp\Interface.reg -Encoding unicode

  6. 再度、コマンド プロンプトに切り替えます。

    cmd

  7. “5” で生成したレジストリ情報をインポートします。

    reg import “C:\Temp\Interface.reg”