Windows Vista以降では「コントロールパネル」の「Windows Update」からアップデートを実行します。ですが、このWindows UpdateのUI、「セーフモード」でPCを起動すると消えてしまうんです。
前回は「セーフモード」でWindowsインストーラー形式(拡張子.msiや.msp)の更新プログラムやソフトウェア、修復ツール(Microsoft Fix itなど)をインストールできるようにする方法と、「セーフモードとネットワーク」で起動したPCでWindows Updateを実行可能にする方法について、Windows XPを例に説明しました。
これらのテクニックは、Windows VistaやWindows 7、Windows 8、Windows 8.1でも使えるものです。もちろん、Windows Server 2008以降のWindows Serverでも使えます。
例えば、Windows Vista以降の更新プログラムの標準的な形式である「Windows Updateスタンドアロンインストーラー」(拡張子.msu)は、「Windows Update」(wuauserv)サービスの「Windows Update Agent(WUA)API」を使用して更新プログラムをインストールします。したがって、Windows Updateに関連するいくつかのサービスを許可すれば、「セーフモードとネットワーク」で起動したPCでもインストールできるようになります(画面1、画面2)。
Windows Update関連のサービスを「セーフモードとネットワーク」で許可すれば、Windows Updateスタンドアロンインストーラーの実行だけでなく、Windows Updateも実行できるようになるはずです。
しかし、Windows Vista以降のPCを「セーフモードとネットワーク」で起動して「コントロールパネル」を開くと、通常起動時よりも表示される項目が少ないことに気が付くでしょう。そして、「セーフモードとネットワーク」で起動したPCの「コントロールパネル」の中には、Windows Updateは見当たりません。これは「セーフモード」の場合も同様です。
Windows Updateのユーザーインターフェイス(UI)は、次のいずれかのコマンドラインを実行して開くことができます。しかし、「セーフモードとネットワーク」でこれらのコマンドを実行しても、何も起きません(画面3)。
control.exe /name Microsoft.WindowsUpdate
wuauclt.exe /showWindowsUpdate または /showWU
どうやら「セーフモード」や「セーフモードとネットワーク」では、Windows UpdateのUIは無効になるようです。ただし、無効になるのは“コントロールパネルのWindows UpdateのUI”であって、Windows Updateの機能そのものが無効になっているわけではありません。
なぜなら、Windows 8の場合は「PC設定」→「Windows Update」、Windows 8.1の場合は「PC設定」→「保守と管理」→「Windows Update」のモダンUIを使用して、Windows Updateによる更新のチェックとインストールが可能だからです(画面4)。
Windows Update Agent APIは公開されているCOM(Component Object Model)インターフェイスであるため、Windows Updateの標準UIを使用しなくても、Windows Script Host(WSH)のスクリプトやWindows PowerShellスクリプトからWindows Updateを実行することができます。以下のサイトには、さまざまなサンプルスクリプトが掲載されています。
筆者は以前、上記サイトのサンプルの1つ「Searching,Downloading,and Installing Updates(WUA_SearchDownloadInstall.vbs)」をコピペして、ユーザーの対話なしで検索からダウンロード、インストール、必要な場合はPCの再起動までを実行するWSH用のVBScript(WindowsUpdate.vbs)とWindows PowerShellスクリプト(WindowsUpdate.ps1)を書いたことがあります(画面5)。
これらのスクリプトは、Windows UpdateやMicrosoft Updateで自動選択される推奨の更新プログラムを全てインストールしようとします。4年程前に書いたスクリプトですが、最新のWindows 8.1環境でも動作します。
これらのスクリプトをWindows Updateサービスを有効にした「セーフモードとネットワーク」で実行すれば、Windows Updateを実行できます。もちろん、タスクスケジューラーから自動実行するなど、これらのスクリプトを普段使いで活用することもできます。自由にコピペ、改造してお使いください。
余談になりますが、Windows Server 2008 R2のServer Coreインストール、およびWindows Server 2012以降にある「sconfig」ユーティリティの「更新プログラムのダウンロードとインストール」メニューは、同じサンプルスクリプトをベースにした「%Windir%\System32\ja-jp\WUA_SearchDownloadInstall.vbs」を実行するようになっています。
PCを「セーフモード」や「セーフモードとネットワーク」で起動すると、Windows Updateを含む一部のコントロールパネル項目が利用できなくなるという状況についても解明しました。結論から言うと、これは“Windows Vista以降の仕様”ということになります。ただし、既定の仕様をカスタマイズすることは可能です。そのヒントをWindowsの開発者向けドキュメントの中に見つけました。
Windows Vista以降では、レジストリに登録されているコントロールパネルの各項目(.cplや.dllなど)に対応した「System.ControlPanel.EnableInSafeMode」という名前のキーまたは値に、「1(セーフモードで項目を表示)」「2(セーフモードとネットワークで項目を表示)」「3(両方で項目を表示)」の値を設定することで、既定で非表示になっているコントロールパネルを表示するようにカスタマイズできるようです。
レジストリを「Windows Update」という文字列で検索したところ、以下の場所にそれらしきキーを見つけました。このキーの中に「System.ControlPanel.EnableInSafeMode」というREG_DWORD値を作成し、値に「2」または「3」を設定すれば目的を達成できそうです。
HKEY_CLASSES_ROOT\CLSID\{36eef7db-88ad-4e81-ad49-0e313f0c35f8}
しかし、キーの中に値を作成しようとすると、「値を作成できません。レジストリへの書き込み中にエラーが発生しました。」と表示されました。そこで、このキーの所有者を既定の「TrustedInstaller」からローカルの「Administrators」に変更し、「Administrators」にフルコントロールのアクセス許可を与えた上でキーを作成しました(画面6)。
「System.ControlPanel.EnableInSafeMode」の値を作成、設定後にコントロールパネルを開くと、めでたくWindows Updateの項目が表示されました。もちろん、この項目をクリックしてWindows Updateを実行することもできました(画面7、画面8)。
なお、この方法はレジストリキーの所有者やアクセス許可の変更が必要なので、決してお勧めはしません。この方法を行う方は、自己責任でお願いします。“「セーフモードとネットワーク」でもWindows Updateする”ということに固執してしまいましたが、緊急のトラブルを解決するためにここまでする必要はないでしょう。
次回は、「セーフモード」でも起動できなくなったPCに更新プログラムをインストールしたり、アンインストールしたりするテクニックを紹介します。知っているとちょっとしたヒーローになれるかもしれませんよ。それともオタクっぽいと思われたりして……。
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2014)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.