半年に1回行われる大型アップデート。毎回何かしらのバリエーション豊かなエラーを吐き出してくれるひとり情シスの真価を問われているかのようなお祭りの中で、新たなバリエーションが出てきました。
アップデートのインストールは成功するのに、更新プログラムの構成中にフリーズしてしまう、エラーコードも分からないというモヤモヤ感MAXなエラー。
今回は私なりの対応策をご紹介していきます。
ちなみに、前回までのエラーと対応集はこちら。
何処でつまづいているか、から絞り込む
エラーになったポイント
- インストール自体は成功している
- アップデートの適用中のエラー
- 決まって90%でフリーズする
以上から考えると、更新プログラム絡みのエラーではないと推測されますので、
- 定期の更新プログラムインストールが失敗しているものがあれば再インストールして再トライ
- WindowsUpdate クライアント情報を削除して再トライ
- サービススタック更新プログラムのインストールして再トライ
という更新プログラム系の対策では解決しないということになります。
(念のためやってみたけど、やはり事態は解決しませんでした)
準備出来たアップデートを適用中にフリーズする、ということは、パソコンさんが手順書通りにシステムファイルになんか上書きしようと思ったら、「このファイル、思ってたんと違う!」ってなってパニクってる、という状態なのではないか、と推測します。
ということは、システムファイルの修復が効きそうです。
これをやって再度トライしてみます。
・・・が、結果全く変わらず90%でフリーズ。惨敗です。
ちなみに、この時にも聞かれたよくある質問について私なりの解釈でお答えします。
-
「フリーズ」と判断するには何分動きが無かったらフリーズなのか?
-
「どのくらいの時間が経ったか」より「その子がどんな感じで悩んでいるか」で私は決めます。
今回はアクセスランプが明滅していたものの一晩経っても全く進まなかったのでフリーズと判断して電源ボタン8秒長押しで落としました。
フリーズの原因を読み解く
強制終了させてから起動すると「コンピュータに対する変更を元に戻しています」という今までの時間を水に流すメッセージと共に復旧されて、元のバージョンで起動します。
今回は運がよく(?)起動した後に以下のようなメッセージが表示されました。
"0x"から始まるエラーコードが出てくれると、トラブルシューティングは比較的楽になるので助かります。
このメッセージも無くダンマリで戻るパターンもありますし、「インストールに失敗しました」とだけ言い放つパターンもあります。
エラーコードが分からない場合は"SetupDiag.exe"というMicrosoftの診断ツールからLogファイルを取得することができます。
標準装備されていないので、Microsoftからダウンロードして使用することになります。
念のため、動作環境として.NET FrameWork4.6以降が必要です。
SetupDiag.exeの使いかた
一番簡単な使い方は、上記サイトからダウンロードしてダブルクリック。これだけ。圧縮無しのexe状態でダウンロードされるのでそのまま使えます。
保存先を替えたいとか、オプションを使いたい場合はコマンドプロンプトから パラメータを追記して起動します。
内容としては、隠しファイルになっているLogをエクスポートしてEXEファイルと同じ場所に保存する、という動きをします。エクスポートが終わると以下のファイルが出来上がります。
SetupDiagResults.log | アップデートを走らせた結果どうなったのか、のログ |
setuperr.log | アップデートを走らせたときに出たエラーのログ |
setupact.log | アップデートで何をやったのか、のログ |
setupapi.offline.log | API、ドライバのインストールに関するログ |
SetupDiag.exe.config | 設定ファイル。分析には使わない。 |
別のPCで同様のエラーが出た時はダンマリだったので、これでエクスポートして"setuperr.log"から"0xなんとか"と書かれたものを片っ端からググる、という作業をしました。
0xC1900101 で始まるエラーはドライバーのエラー
めでたくエラーコードが出ていたのでググってみると意外とあっさり答えが出ました。
通常、0xC1900101 で始まるエラーはドライバーのエラーとのこと。このエラーコードには後ろに拡張コードがついていて、どのあたりのドライバでエラーになってるのかが示されます。
2000番台や3000番台はホントのデバイスドライバのエラーである可能性が高いので、デバイスマネージャーからエラーになってるドライバを探す作業となります。
で、今回の拡張コード 0x4001E、4000番台はセキュリティソフトが起因するエラーのようです。実際、デバイスマネージャーで確認してもエラーなデバイスはありませんでした。
この場合、一般的な対策方法としては「一時的にセキュリティソフトをアンインストールする」となっております。
「アンインストールしてもMicrosoft Defenderで守れるから平気だぜ!HAHAHA!」
的なことをMicrosoftのサイトにも書いてありますが、会社によってはアンインストールさせてくれないところもあるかと思います。親会社がアンインストーラーを持っている場合なんかは
アップデートが失敗するのでセキュリティソフトをアンインストールしたいんですけど・・・
はぁ?何言ってんだ、メーン?
って言われかねないパターンもあると思います。
そんな場合はダメ元で「クリーンブート」を試してみましょう。
クリーンブートのやり方
- 「管理ツール」の「システム構成」を開く
- 「スタート」→「Windows管理ツール」→「システム構成」
若しくは「スタート」→「msconfig」とタイプしてエンター
- スタートアップのオプションを選択
- 「全般」タグの「スタートアップの選択」から「スタートアップのオプションを選択」を選択して、「スタートアップの項目を読み込む」のチェックを外す
- 「サービス」タグでサービスを無効化
- 「サービス」タグを選択して「Microsoftのサービスを全て隠す」にチェックを入れてから、「すべて無効」を選択して「OK」を押す。パソコンの再起動が促されるので再起動する。
こうすることで、OS以外の機能が停まった状態で起動されるので、インストールを邪魔立てするヤツが一時的に沈黙するであろう、という魂胆です。
ちなみに、「だったらセーフモードでインストールしちゃえばいいんじゃね?」と思う方もいるかもしれませんがそれは私でした。セーフモードではインストーラーが走ってくれません。クリーンブートがインストール出来る最小限構成です。
これによって見事90%でのフリーズは避けられ、92%でフリーズするようになりました。ちくしょう!
セキュリティソフトは権限が超強力なパターンが多く、サービスの無効化程度では止まってくれないソフトもあり、今回使用しているセキュリティソフトもその一つでした。ま、確かに手動で簡単にサービス止まるようならハッカーさん大喜びだよね。
結局親会社に事情を説明して社内的な洗礼を目いっぱい受けながらセキュリティソフトのアンインストール権限を貰う手続きを踏むこととなりました。やはり社内手続きが一番難易度高いという事実。
そんなこんなでセキュリティソフトをアンインストールして再度アップデートをトライしたところ、めでたくアップデートが全て完了しました!
大型アップデートの度に色々なバリエーションでエラーは攻めてきます。しかも半年ごとに。
いくらかでもエラー回避の一助になれば幸いです。