Windows7にServicePack1をインストールするのに2年ぐらい掛った話


2011年ごろにWindows7のServicePack1は配布されはじめたはずですが、
私はつい昨日にようやくインストールができました。

なんだか邪魔してるかもしれないWindows Updateの更新プログラムをアンインストールしてみたり
CheckSur.exeをインストールしてみたりと色々試したのですが結局それらは徒労でした。

次に問題解決手順をメモしときます。

ERROR_SXS_ASSEMBLY_MISSING(0x80073701)とかERROR_NOT_FOUND(0x80070490)で
インストール失敗してる人向け。

・日本MSの公式フォーラム

Windows Updateの再実行、SP1を手動ダウンロード/手動インストール、
そしてOSの再インストールと月並の回答しかありません。
これは参考にしないほうがよいかと……
http://answers.microsoft.com/ja-jp/windows/forum/windows_7-windows_install/windows-7-service-pack/8e219dd5-9080-4997-a2f4-7ccbf602ef78

・じゃあどうしよう

英語フォーラムや英語ブログで回答がいくつかありますが、最終的にこれらが功を奏しました。
ERROR_SXS_ASSEMBLY_MISSINGの解決方法
http://marcin.malkowski.eu/2011/03/02/windows-7-service-pack-1-error_sxs_assembly_missing/
ERROR_NOT_FOUNDの解決方法
http://beerpla.net/2011/05/06/how-to-fix-error_not_found-0x80070490-during-windows-7-sp1-installation/

・順を追って

ERROR_SXS_ASSEMBLY

まず、普通にインストールしようとしたら失敗してしまいます。
sfc /scannowというコマンドを管理者権限で行ないファイルの破損の有無をチェックしたりしても
問題解決はせず。
この時のエラーがERROR_SXS_ASSEMBLY_MISSING。

この場合、C:\Windows\Logs\CBS.logを参照します。
(管理者権限でないと開けないファイルなのでメモ帳などを管理者権限で開いてから、ファイルを開く→拡張子を「全てのファイル」に→C:\Windows\Logs\とアドレスバーに打つ→CBS.logを開くとすると良い)

最初にErrorが起ったときのログ
2011-02-25 20:31:49, Error                 CSI    000001a3@2011/2/25:23:31:49.483 (F) d:\w7rtm\base\wcp\componentstore\csd_locking.cpp(324): Error STATUS_SXS_ASSEMBLY_MISSING originated in function CCSDirectTransaction::LockComponent expression: (null)
の直上の行
2011-02-25 20:31:49, Info                  CBS    Exec: Resolving Package: Microsoft-Windows-Client-Drivers-Package~31bf3856ad364e35~x86~pt-BR~6.1.7601.17514, Update: INF_netrndis, PinDeployment: x86_netrndis.inf-languagepack_31bf3856ad364e35_6.1.7600.16385_pt-br_5a74a56194bd58af
に注目(この例は先に挙げたサイトより引用)。
ここで、Package: なんとか~x86~pt-BR~6.1.7 みたいに書いてある場所ありますよね。
この、pt-BRはロケールといいます。 Linux等を使用したことのある方には馴染があるかもしれません。

少々脱線してロケールについて説明すると、
これはpt(ポルトガル語)-BR(ブラジル)、ということでブラジルで使われるポルトガル語という意味です。
日本だとja-JPです(日本でほぼ公用語と呼べるのは日本語しかないのでjaしかないです)
 カナダだと公用語が英語とフランス語の2つあるので、en-CAとfr-CAといった具合です。


このロケールが指す言語の、Windows用言語パッケージが(何故か)インストールされていないとこのERROR_SXS_ASSEMBLY_MISSINGが発生します。なので、Windowsの表示言語にこの言語をインストールする必要がありますが、
UltimateやEnterpriseでないとインストールできなかったりしたはず(うろ覚え)
そういう時は http://www.froggie.sk/ からダウンロードして、インストールすると良いみたいです。
(公式のものかどうかわからないので、インストールして何かPCに問題が発生しても責任は取れません、自己責任です)

私の場合de-DE(ドイツ-ドイツ語)でエラーが出ていました。
ボリュームライセンスのEnterprise版のはずなのですが、なぜかドイツ語の言語パッケージはインストールできず先程のサイトからインストールしました。

あとはもう一度Windows7 Service Pack 1をインストールしなおせば良いです。
ちなみに、Windows Updateからインストールするより、インストーラをダウンロードしてきて
手動でインストールを試行したほうがダウンロードの手間が省ける上に速いのでラク。

ERROR_NOT_FOUND

これでインストールが無事終わり再起動に入るはずです。
このまま再起動を何回かしたりしてログイン画面になって、
ログイン終えてからインストール終了と出た方はおめでとうございます、あとは読まなくて良いです。

一回目の再起動の後にWindowsの再構成とかメッセージが出ているところでエラーが出て、
ログイン後にインストールに失敗しましたと言われることがあります。

この時ERROR_NOT_FOUNDと言われます(ました)。

その時は、またまたC:\Windows\Logs\CBS.logを参照してください。

Failed uninstalling driver updatesとか0x80070490 - ERROR_NOT_FOUNDとかで検索すると
いくつかログがヒットすればビンゴ
(何故か私の場合検索しても検索がヒットしませんでしたが、そのまま次の手順に進んでも
問題解決できました。なのでログがなくても次を試してみてください)

次はC:\Windows\inf\setupapi.dev.logを参照してください。
これは管理者権限でなくともメモ帳で開けます。

Failed to find driver updateと検索すると、
sto: Failed to find driver update 'C:\Windows\WinSxS\amd64_usbvideo.inf_31bf3856ad364e35_6.1.7600.16543_none_8a1a2513d42628c3\usbvideo.inf' in Driver Store. Error = 0×00000490
といった感じのものがヒットするはずです。(このログも例によって先に挙げたサイトより引用)
どうやら、Service Pack 1をインストールするにあたってドライバを一度アンインストールしようとするも、
そのアンインストールをしようとしたドライバが見つからないというエラーっぽい?
とりあえず、上の太文字のような、''で囲まれたファイルパスを使って、
管理者権限のコマンドプロンプト上で
pnputil -a C:\Windows\WinSxS\amd64_usbvideo.inf_31bf3856ad364e35_6.1.7600.16543_none_8a1a2513d42628c3\usbvideo.inf
とするとドライバをインストールするが良いか、というセキュリティ警告ダイアログが出てきますがこれを了承しドライバを手動で再インストールします。

あとは、もう一度Service Pack 1のインストールを試みてください。

今度こそ成功するでしょう。

私もusbvideo.infがFailed to find updateと言われたのでusbvideo(再インストール時公開名がoem13.infと出ました)というドライバの筋が悪いのかもしれませんが、詳細不明。


兎にも角にも、これにて作業は終了です。
WindowsのドライバSDK(NTDDK)を駆使したりできる方ならここらへんのエラーとかに詳しかったりすぐ原因を特定できるかもですね。
私はかなり苦労した上に結局原因もさっぱりなままでした。

詳細を誰か教えてくださる方が居ればありがたいですね……(疲れました)