PCが起動しなくなった

PCが起動しなくなったので、とりあえずメモ。

2008年1月初頭の Windows update で、「2018-01 x64ベースシステム用Windows 10 Version 1709 の累積更新プログラム(KB4056892)」が適用されて再起動を要求され、青い旗のウィンドウズの画面でフリーズしました。その後、リセットボタンを押しても、電源ボタンを押しても長押ししても、反応せず、BIOS画面に至らず、再起動(ブート)できない状態になりました。

自作PCの電源ユニットが壊れたのかと思って新品を購入し、交換したところ、起動はして、「修復を試みています」の自動修復の画面を経て、Windows 10 へログインはできました。更新の履歴を見ると、「2018/01/06 で実行した前回のインストールが失敗しました – 0x800f0845 」との表示。しばらくすると、また更新画面で再起動を要求されていたので、スタートボタンからの再起動を実行しても、更新画面での再起動の要求はそのまま残っていました。

そこで、更新画面からの再起動を実行したところ、再起動すぐ後の青い旗の画面でフリーズしました。またしても、リセットボタンでも電源ボタンでもBIOS画面に至らず、再起動できない状態になりました。ケース裏のAC100V入力の電源スイッチを切って強制的に電源を落としてから、ケーズ表の電源ボタンを押してもブートしませんでした。AC100V のケーブルを引っこ抜いてしばらく放置し、それから電源ボタンを押したりリセットボタンを押したりしたら、BIOS画面を経て、青い旗の画面、「修復を試みています」等の表示を経て、Windows 10 へログインできました。

また、「2018/01/06 で実行した前回のインストールが失敗しました – 0x800f0845 」になっています。その後、更新画面からの再起動で、またブート不能になってしまうわけです。

「 KB4056892  0x800f0845 」 で Google 検索すると、英語や各国語のページがヒット。古めのAMDマシンでこのような不具合が発生しているようです。日本語では、

ここくらいのようです。Microsoft の対応待ちというところでしょうか。

なお、当方のパソコンの仕様は以下の通り。

  • CPU: AMD Athlon Dual Core Processor 5050e,  2.61 GHz
  • マザーボード: ASUS M3A78 PRO
  • メモリ: 8.00 GB
  • Windows 10 Pro, 64 bit
    • バージョン 1709, OS ビルド 16299.125

(2018/1/7)

(追記)

マイクロソフトがパッチを一時停止といっていますが、再起動してしばらくすると、また自動アップデートされて、ブートしない状態に陥っているように見受けられます。更新を削除しても、また適用されてしまうんですよね。どうしたものやら。 (2018/1/11)

どうにもならないので、更新を非表示にするツールで一時しのぎすることにしました。新しい正規の更新が来たときに気が付かないと、いつまでも古いままになってしまいますが、やむを得ません。自分でこまめにチェックするしかないんでしょうかね。この「“Show or hide updates“ トラブルシューター」、 2015年くらいの記事に紹介されていますが、現役のツールのようです。(2018/1/24)

再起動はできるようになりました。しかし、シャットダウンでは問題発生。「スタート」メニュー右クリックから「シャットダウン」を選んで電源を落とすと、起動できません。ACコードを抜いたり、いろいろ試行しているうちになんとか起動。一方、「ファイル名を指定して実行」から shutdown -s -t 0 すると、起動できました。(2018/1/25)

あらためて KB4056892 のページ( 2018 年 1 月 4 日 — KB4056892 (OS ビルド 16299.192) )を見ると、

マイクロソフトは、ごく一部の古い AMD プロセッサで、この KB をインストールした後にデバイスが起動できない状態になるという報告をお客様からいただいています。

この問題を回避するために、現時点で影響を受ける AMD プロセッサを搭載しているデバイスに対して、Windows OS の更新プログラムの提供を一時的に停止します。

この問題は KB4073290 で解決されています。

となっていて、修正プログラムが出ているようです。ただ、

には、Windows Update の自動更新を待ったほうがよいと書かれています。KB4073290 のページも簡潔すぎてよくわかりません。(2018/1/28)

2月の定例 Windows Update でも自動的に降ってこなかったようなので、KB4073290 を手動で適用することにしました。まず、Show or hide updates で KB4056892 を表示状態にして、「更新とセキュリティ」を表示してダウンロード、インストール、再起動待機状態に。それから KB4073290 を Microsoft Update カタログ から手動ダウンロード、インストール。そして再起動。無事に再起動しました。Windows にログイン後、「2018-02 x64 ベース システム用 Windows 10 Version 1709 の累積更新プログラム (KB4074588)」がダウンロード、インストールされて、再起動になりました。なお、シャットダウンのあと起動しない問題は生じていますが、shutdown コマンドで回避することにします。 (2018/2/14)

PowerShellの動作がWindows 10で若干変更

Windows 8.1 から 10 にアップグレードして約2週間、ほとんどそのままの環境で使えています。支障が出たのが自作のファイル バックアップ スクリプトで、PowerShell から robocopy.exe を呼び出すときにエラーになりました。Windows 8.1 の PowerShell までは、バッドノウハウの一種なのでしょうが経験的に、外部プログラムに引数を渡すときに空白区切りの文字列にすれば動いていたのでした。

古いスクリプトの引数の渡し方(文字列による独自手法)は、こんな感じ:

$prms = """C:\org\documents""" + " " + """D:\bak\documents""" + " " + "/S" + " " + "/XD ""cache"" ""cache2""";
cmd /c robocopy $prms;

Windows 10 の PowerShell で動くように書きなおした現在のスクリプトは、こんな感じ:

$prms = ( """C:\org\documents""", """D:\bak\documents""", "/S", "/XD", """cache""", """cache2""" );
robocopy $prms;

配列に外部プログラムへの引数を入れて、そのまま渡しています。新しい方も、経験的に動くという手法ですが、多少は正統的な感じがしませんか?

ところで、PowerShell のバージョンですが、Windows 8.1 では、

PS C:\> $PSVersionTable

Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.17400
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2

Windows 10 では、

PS C:> $PSVersionTable

Name Value
---- -----
PSVersion 5.0.10240.16384
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 10.0.10240.16384
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3

となっていました。つまり、Windows 8.1 は PowerShell 4.0 で、Windows 10 は PowerShell 5.0 ということになります。スクリプトが動かなくなったということは、どこかが、微妙に異なっているのですね。

(2015/9/1)