Q

Windows XPのクライアントの中に,自動更新が0%で停止してしまって,Windows Updateからのセキュリティ更新プログラムの適用やダウンロードが実行できないマシンが存在します。サービス・パックはSP1aまたはSP2を適用したものが混在しています。セキュリティ対策以外のパッチに関しては,無事ダウンロードおよびインストールができています。


△ 図をクリックすると拡大されます
図1●自動更新に失敗したWindows XPマシンのWindows Update.log

 Windows Update.logでログを確認してみたところ,エラー・コードとして「80072ee2」が表示されていました(図1)。また,パケットをキャプチャすると,クライアントからはデータが送信されていますが,相手からは何も応答がないままタイムアウトになっています。

 その他のクライアントOSでは特に問題はありません。何が原因なのでしょう?

A

Windows XP以外のクライアントからは問題なくアップデートできているということですので,ネットワーク通信や各種リソースの問題はないようです。エラー・コードで記録されている80072ee2を調べてみたところ,「WindowsUpdateに接続しダウンロードしようとしたところタイムアウトになってしまった」という意味でした。

Windows XPのみが最新のソフトを搭載
 実はWindows XPとそれ以外のWindowsとでは自動更新を実行するWindows Updateのバージョンに差があります。Windows XPには,最新版であるversion 5が搭載されており,Windows本体の重要な更新だけでなく,OfficeやSQL Serverなどのアプリケーションやハードウエアのドライバについても更新プログラムを取り扱えるようになっています。このversion 5は,Windows 2000およびWindows Server 2003でも利用できるようになる予定ですが,2004年11月現在では未対応です。

 Windows Updateのバージョンは,Windows Updateのサイトへアクセスすると簡単に判別できます。ブラウザ上に表示されるURLで[http://]の後に表示される番号がクライアントのWindows Updateのバージョンとなります。自動更新のプログラムも,Windows Updateのバージョンと連動しています。

 Windows Updateでは,HTTPSによるSSL暗号化通信が用いられています。さらに,Windows Update version5以降ではプロキシ・サーバーを通して通信しようとすると,TCPプロトコルの本来の動きである3-ウエイ・ハンドシェイクができないことがあります。


△ 図をクリックすると拡大されます
図2●Windows XPの自動更新クライアントはWinHTTP 5.1を使ってWindowsUpdateサイトにアクセスする

 3-ウエイ・ハンドシェイクとは,通信の際に確認応答として信頼性を高めるTCPプロトコルの手法です。送信したパケットに対してシーケンス番号をつけ,返事がないパケットは再度送信することで抜けを防ぎ信頼性の高い通信を実現します。この際に,相手先に送信してよいかという意思表示(SYN)を送り,相手からは受け取ったという返事(SYN+ACK)を受け取ってから,再度送りますという意思を表示(ACK)することで通信を確立させます(図2

最新版はBITS/WinHTTPを利用
 しかし,今回のエラー・メッセージとパケット・キャプチャの動きをみると,相手からのSYN+ACKの送信がないため,そもそも相手までSYNパケットが届いていない状況のようです。その他のクライアントでは問題なくアップデートできており,WindowsUpdateのサイトへは接続できていることからInternet Explorerのプロキシなど基本的な設定は問題ないと考えられます。

 とすると,次にWinHTTPプロキシの設定が正しく設定されているかを確認してみるといいでしょう。WindowsXPで使っているWindowsUpdate version 5は,バックグラウンド・インテリジェント転送サービス(BITS)2.0を利用して新しいサービス,新しいバージョン,その他のプログラムのファイルを転送します。BITS2.0は,WinHTTPの最新版である5.1を利用しています。

 今回のケースで考えられることは,このWinHTTPのプロキシ・サーバー情報が正しく設定されていない可能性があります。WinHTTPのプロキシ・サーバーは,Windowsのコントロール・パネルからは設定できません。また,環境設定ユーティリティを使用しても,Internet Explorerの設定を適用しません。

WinHTTPのプロキシを正しく設定
 プロキシ設定が正しくない状況でWinHTTPを使用したHTTPリクエストを送信すると,エラーが発生します。このことは,MSDNのWebサイトにも記載されています(該当サイト)。


△ 図をクリックすると拡大されます
図3●WinHTTPのプロキシはProxycfgで設定する

 WinHTTPプロキシの設定は,コマンド・プロンプトから「Proxycfg」を実行すると確認できます。この中に,現在使用中の情報がない場合は,Win-HTTPプロキシを改めて設定する必要があります。設定方法としては,コマンド・プロンプトから次のように入力します(図3)。

 Proxycfg -p プロキシ・サーバー名

 その後,Proxycfgコマンドで再度登録されているかを確認します。オプションを変更することで,Internet Explorerに設定されたプロキシ情報をレジストリから読み込むことも可能となります。図3のように正しいプロキシ情報が表示されていれば,設定は完了です。再度,WindowsUpdateを実行すれば,ファイルをダウンロードするようになります。

 今回のケース以外にも,WindowsUpdateおよび自動更新に関しての問題は,マイクロソフトからWindowsUpdateのトラブルシューティング情報(該当サイト)として公開されています。

 また,Windows Updateに関するトラブルについては,2004年11月現在はマイクロソフトに無償で問い合わせが可能となっています。詳しくは,マイクロソフトのサポート・ページを参照ください。

櫻井 敬子