photo by acworksさん
Windows 10 Creater Updateにアップデートしました。暫くは問題なく使用できていたのですが、最適化ソフトで異常に気付きました。次に、DISMでWindowsイメージの修復を試したところ、 エラー0x800f081f が出力され、修復が完了しませんでした。今回はこの修復方法を紹介します。
はじめに
Windows 10 Creater Updateが配信され、これをきっかけにアップデートしました。
暫くは問題なく使用できていたのですが、Glary Utilitiesという最適化ソフトで異常に気付きました。
具体的には、「ショートカットの修復」というショートカットリンクを確認する機能で、処理が途中で止まって先に進まないという現象でした。
ここ最近、Windows 10に何かしらの問題が起こったら、スキャンディスクとDISMを実行するのが定番でした。
そこで、まずスキャンディスクを行ったところ、特に問題なく処理が完了しました。
次に、DISMでWindowsイメージの修復を試したところ、エラー0x800f081fが出力され、修復が完了しませんでした。
その際に使用したDISMコマンドは以下の通りです。
DISM /Online /Cleanup-Image /RestoreHealth
そして、表示されたエラーの内容は、以下のようなものでした。
C:\WINDOWS\system32>機能の復元に必要なファイルの場所を指定するには、”Source” オプションを使用してください。ソースの場所 の指定の詳細について は、http://go.microsoft.com/fwlink/?LinkId=243077 を参照してください。
どうやら、修復に必要なソースファイルが見当たらないようで、そのソースを指定する必要があるようです。
そうは言っても、いままでにソースの場所を指定してDISMを実行したことはないので、当初は皆目見当がつきませんでした。
そこで、DISMの”Source”オプションを使用してエラー0x800f081fを解決する方法を調べたところ、いくつかの方法が見つかりました。
そこで、今回はこの修復について、いくつかの方法を紹介します。
イメージによる エラー0x800f081f の修復
0x800f081fのエラー修復について調べてみると、Windowsイメージによる修復方法が多かったです。
Windowsイメージによる修復にはDISMコマンドを使用します。
ただ、DISMコマンドには色々な方法が多く、調べてみてかなり困惑しました。
Windows 10のDISMのコマンドについては、以下のサイトが参考になります。
方法1
ここでは、WindowsイメージのWIMファイルを利用した方法を紹介します。
以下のサイトを参考にしました。
ちなみに、WIMファイルとは、多数の関連ファイルを格納した圧縮パッケージだそうです。
WIM は、Windows Vista で導入されたファイル ベースのディスク イメージ形式です。WIM ファイルは、多数の関連ファイルを格納した圧縮パッケージです。WIM ファイルの形式は、圧縮率を最大にする LZX 圧縮、高速に圧縮する XPRESS 圧縮、または非圧縮の 3 種類の圧縮方法で最適に利用できるようになっています。
この方法は、Windows10のISOイメージやインストールメディアにあるWIMファイルで修復します。
実行には、まず以下のサイトからMediaCreationTool.exeをダウンロードし、ISOイメージをダウンロードします。
次に、ダウンロードしたISOイメージをUSBメモリやDVDなどの光学ディスクに書き込むか、仮想イメージとしてそのまま扱います。
ISOイメージをそのまま仮想イメージとして扱う場合は、仮想ドライブを作成できるアプリケーションをインストールする必要があります。
ISOイメージ・DVD・USBメモリのいずれかでインストールメディアを読み込める状態にしたら、コマンドプロンプトを起動します。
コマンドプロンプトの起動に関しては、「コマンドプロンプト(管理者権限)の起動」を参照してください。
コマンドプロンプトを起動したら、以下のコマンドを入力します。
DISM /Online /Cleanup-Image /RestoreHealth /source:WIM:D:\Sources\Install.wim:1 /LimitAccess
/Sourcesは、修復に使うことができる既知の適切なバージョンのファイルの場所を指定します。
この例では、DドライブにマウントされたISOイメージのSourcesフォルダの中にあるInstall.wimが修復に用いられます。
/LimitAccessは、オンラインイメージの修復のためのWindows UpdateにDISMがアクセスできないようにします。
ただ、上記のコマンドではエラー87が出てDISMが実行されませんでした。
それもそのはずで、修復に使用したインストールメディアには、/Sourcesで指定したInstall.wimが含まれていないからです。
そこで、以下のようにコマンドをwimからesdに変更しました。
DISM /Online /Cleanup-Image /RestoreHealth /source:ESD:D:\Sources\Install.esd:1 /LimitAccess
このコマンドではDISMが実行されましたが、やはり途中で0x800f081fが出力されて中断されてしまいました。
ちなみに、:1は、恐らく/Index:1を省略したものだと思いましたが、どうやらイメージ番号のようで、/Indexを追加した場合は、DISMが実行されませんでした。
残念ながら、この方法では、DISM実行時に表示されるエラー0x800f081fを解決することができませんでした。
方法2
この方法は海外で紹介されていて、ちょっと変わっています。
もともとは以下のサイトで紹介されていました。
上記サイトで紹介されている参考サイトは、以下のサイトにある”microsoft-windows-netfx3-ondemand-package.cab”をダウンロードする必要があります。
まず、参考サイトの”here”をクリックして、指定された.cabファイルをダウンロードします。
次に、ダウンロードが終了したら、そのファイルをCドライブ直下に移動します。
その後は、コマンドプロンプトを「管理者として実行」し、以下のコマンドを入力して実行します。
Dism.exe /online /enable-feature /featurename:NetFX3 /source:C:\ /LimitAccess
以下の図に示すように、通常の以下のDISMコマンドを実行した場合、約89%で0x800f081fエラーが出てDISMが途中で終了しています。
DISM /Online /Cleanup-Image /RestoreHealth
しかし、今回紹介するコマンドで実行するとDISMが100%で完了します。
DISMが無事完了し、喜んだのも束の間、いざ通常のDISMコマンドを実行したところ、やはり0x800f081fエラーが出て途中で終了してしまいました。
再起動した後も同じで、この項目で最初に紹介したサイトを見ると、私と同じように完全にエラーが修復されなかった人がいます。
どうやら、.NETがインストールされていることが関係しているようですが、.NETの事には触れられていません。
この方法が有効かどうかは正直微妙な所です。
ちなみに、ここでもレジストリを操作する方法が紹介されています。
残念ながら、この方法でも、DISM実行時に表示されるエラー0x800f081fを解決することができませんでした。
方法3
方法1では、Install.wimを使用してWindowsイメージの修復を行っています。
しかし、以下の参考サイトを見ると、install.wimはWindows 10 Enterpriseのインストールメディアに格納されているそうで、HomeやProはisntall.esdになっているそうです
これまでに調べた方法は主にInstall.wimを使用していますが、前述したように、Windows 10のHomeやProはInstall.wimではないため、Install.esdを使用してWindowsイメージの修復を試みていました。
Install.wimとInstall.esdについて調べてみると、Install.esdからInstall.wimを抜き出す方法があることが分かりました。
1.一時フォルダの作成とInstall.esdのコピー
まず、最初にInstall.wimを抜き出すために、Windws 10のインストールメディアからInstall.esdを任意の場所にコピーします。
Install.esdは、インストールメディアを32bit(x86)、64bit(x64)のいずれかで作成している場合、”任意のドライブ:/sources”に格納されています。
インストールメディアを両方で作成した場合、32bitの場合は”任意のドライブ:/x86/sources”、64bitの場合は”任意のドライブ:/x64/sources”に格納されています。
これらのことから、自分のPCにあったアーキテクチャのInstall.esdを選びましょう。
この方法で参考にしている日本語サイトは、どちらも以下のように任意の名前で一時フォルダを作成し、その中にInstall.esdをコピーしています。
- C:/TEMP/WIM/
ただ、以下の海外サイトでは、一時フォルダを作成せず、ルート直下にInstall.esdをコピーしてInstall.wimを作成しているようです。
また、日本語サイトでは一時フォルダ内に作成されたファイルが削除できなくなる場合があるようです。
ただし、削除方法がないわけではないので、どちらを選ぶかは任意で行ってください。
2.コマンドプロンプトの起動とフォルダの指定
コマンドプロンプトの起動に関しては、「コマンドプロンプト(管理者権限)の起動」を参照してください。
コマンドプロンプトを起動したら、Install.ecdをコピーしたフォルダを指定するために、以下のコマンドを入力します。
CD C:/TEMP/WIM
今回の場合は、最初に作成した一時フォルダに合わせています。
一時フォルダを作成せずに、Cドライブ直下にInstall.ecdをコピーした場合は、以下の通りです。
CD C:/
3.SourceIndexの確認
次に、Install.ecdに含まれるSourceIndexの確認を行います。
この理由として、Install.ecdには、Pro・Home・Educationの3つのイメージが含まれているからです。
上記で紹介した日本語の参考サイトでは、コマンドの紹介はされていますが、この確認までは行っていません。
海外サイトでは、コマンドの紹介や手順も書かれていました。
SourceIndexの確認方法は、コマンドプロンプトでInstall.ecdをコピーした場所を指定した後、以下のコマンドを入力します。
日本語サイトと海外サイトでは、コマンドの表記が若干異なるので、比較のためにどちらも記載しておきます。
日本語サイト |
DISM /Get-ImageInfo /ImageFile:install.esd |
海外サイト |
DISM /Get-WimInfo /WimFile:install.esd |
今のところ、どちらのコマンドを使用しても、出力される結果は以下の図で示すように同じです。
それぞれのコマンドで調べてみると、マイクロソフトの公式のコマンドラインオプションでは”Get-WimInfo”は2009年10月に記載されており、”Get-ImageInfo”は2014年4月に記載されています。
“Get-ImageInfo”の方が新しいので、今後使用するコマンドとしては、こちらの方が良いかもしれません。
今回、修復に使用したPCのOSは、32bitと64bitのWindows 10 Proを使用しているので、SourceIndexが1になります。
番外
以下のサイトはインストールメディアにあるInstall.esdからInstall.wimを作成するのではなく、クリーンインストールの際にCドライブに保存されたInstall.esdからInstall.wimを作成する方法を紹介しています。
4.Install.wimの作成
SourceIndexの確認が終わったら、次は、Install.wimの作成を行います。
Install.wimを作成するためのコマンドは、以下の通りです。
dism /export-image /SourceImageFile:install.esd /SourceIndex:1 /DestinationImageFile:install.wim /Compress:max /CheckIntegrity
このコマンドは、どちらの参考サイトも同じです。
5.修復の実行
Install.wimの作成が終了したら、今度は幾つかのDISMツールを使用します。
この方法に関して、上記で紹介した海外サイトを参考にしています。
1.StartComponentCleanup
まず最初に”StartComponentCleanup”を実行します。
Windowsは更新ファイルをWinSxSフォルダに残すようです。
WinSxSフォルダにある古くて利用されていない更新ファイルをこのコマンドによって削除することができます。
なぜ、この時点で使用するかは、私自身よく理解していません。
どこで読んだか、ソースを忘れてしまったので当てになりませんが、DISMでは修復の際に更新ファイルも参照したかと思います。
今回の問題はCreaters UpdateにバージョンアップしたWindows 10が軒並みDISMの実行で同様の問題が生じました。
“LimitAccess”で更新ファイルにを参照しないようにしているのですが、ひょっとしたら、WinSxSにある余計な更新ファイルを参照しないようにする意味があるのかもしれませんね。
とりあえず、実行したコマンドは以下の通りです。
DISM /Online /Cleanup-Image /StartComponentCleanup
ただ、このコマンドを実行しても、私の場合はどのPCもこの処理が20%で完了してしまいました。
何度やっても変わらないので、次の処理を実行することにしました。
2.AnalyzeComponentStore
次に、”AnalyzeComponentStore”を実行します。
このコマンドはWinSxSフォルダのサイズの分析を行います。
このコマンドを行う理由は全く見当がつきませんでした。
DISM /Online /Cleanup-Image /AnalyzeComponentStore
3.RestoreHealth
最後に、”RestoreHealth”を実行します。
ここでようやっと上記で作成したInstall.wimの出番となります。
コマンドは以下の通りで、方法1で紹介したコマンドとソースファイルの場所が違うだけでほぼ同じです。
DISM /Online /Cleanup-Image /RestoreHealth /source:WIM:C:\TEMP\WIM\Install.wim:1 /LimitAccess
今回は作成したソースファイルがWIMで、Install.wimを一時フォルダの”C:\TEMP\WIM”に格納しているので、その場所を指定します。
しかし、このコマンドでもエラー0x800f081fによって途中で中断されてしまいました。
ところが、PCを再起動して試しに”Source”オプションを使用しない通常のDISMの”RestoreHealth”を実行したところ、問題なく100%で完了しました。
レジストリによる エラー0x800f081f の修復
Windowsイメージによる修復方法3で今回の問題が解決してしまったため、この方法は試していません。
ただ、私が調べた方法としては、最終手段のようなので自己責任でお願いします。
今から紹介する方法はレジストリキーを操作します。
レジストリキーの操作によっては、PCが起動しなくなる場合があります。
この方法を行う場合はレジストリのバックアップが必須です。
Creaters Updateの更新によって生じたエラー0x800f081fの場合、すでに修正ファイルが配布されたので、この方法は不要である可能性が高いです。
レジストリキーの削除
Windowsイメージによる修復ができなかった場合の方法として、以下の二つのサイトを見つけました。
どちらも削除するレジストリキーは同じで、以下の二つのレジストリキーを削除します。
-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackageIndex\Microsoft-Windows-TestRoot-and-FlightSigning-Package~31bf3856ad364e35~amd64~~0.0.0.0
-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Microsoft-Windows-TestRoot-and-FlightSigning-Package~31bf3856ad364e35~amd64~~10.0.15063.0
削除する前に対象となるレジストリキー上で右クリックを行い、その際に表示されるメニューでエクスポートをクリックすると、そのキーのバックアップを取ることができます。
このため、レジストリキーを削除する際は、その前に必ずバックアップを取りましょう。
それでもダメな場合
レジストリキーを削除する方法として、以下のような方法も見つけました。
この方法では上記二つのレジストリキーに加え、以下の4つのファイルを削除するようです。
-
C:\Windows\servicing\Packages\Microsoft-Windows-TestRoot-and-FlightSigning-Package~31bf3856ad364e35~amd64~~10.0.15063.0.cat
-
C:\Windows\servicing\Packages\Microsoft-Windows-TestRoot-and-FlightSigning-Package~31bf3856ad364e35~amd64~~10.0.15063.0.mum
-
C:\Windows\System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\Microsoft-Windows-TestRoot-and-FlightSigning-WOW64-Package~31bf3856ad364e35~amd64~~10.0.15063.0.cat
-
C:\Windows\System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\Microsoft-Windows-TestRoot-and-FlightSigning-Package~31bf3856ad364e35~amd64~~10.0.15063.0.cat
上記の二つのレジストリキーと4つのファイルを削除したら、一度、PCの再起動を行います。
PCが再起動したら、次にコマンドプロンプトで以下のコマンドを実行します。
DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase
この次に、通常の”RestoreHealth”を実行します。
これでもダメな場合、さらにいくつかの手順を紹介していますが、ここでは割愛させていただきます。
最後に
Creaters Updateによって生じた今回のエラー0x800f081fは2017年5月10日に配布された「Windows 10 Version 1703 の累積更新プログラム (KB4016871)」によって修正されたようです。
ただ、私自身、この問題はその修正ファイルを適用した後も生じていたので、何が原因で問題が解決されたのかよく分かりません。
今回の修復を行ってみて思ったことは、上記で紹介した修復イメージを用いた修復ができない場合、Windowsの方に問題がある可能性が高いということです。
他のフォーラムでも、レジストリによる修正は推奨されておらず、Windowsの更新を待つことを推奨する人が多かったように思います。
方法3まで試してもエラーが修正されない場合は、しばらく様子を見て、Windowsの更新を待った方が無難なような気がしました。
コメント
修復方法3にて同じ様にエラー0x800f081fによって途中で中断されてしまいます。「”Source”オプションを使用しない通常のDISMの”ResotreHealth”」のコマンドの方もお教え頂きたいです!
この記事を書いたのが6年前なので詳しい内容を覚えておりません。
うろ覚えで申し訳ありませんが、確か「5.修復の実行」の1から3を行い、以下のコマンドを入力しただけだったと思います。
DISM /Online /Cleanup-Image /RestoreHealth