今回は,2003年10月4日に公開された2つの修正パッチに焦点を当てながら,次のようなことを考えてみることにします。

「修正パッチ・インストーラの動作は,ユーザーに分かりやすいか?」

 少し古い話になりますが,1995年にWindows 95が発売された当時,「(出荷が予定されていた)Windows NT 4.0を待つか,Windows 95を採用するか」という議論が沸き起こりました。「Windows 95システムプログラミング」(ソフトバンクパブリッシング発行)の著者であるMatt Pietrek氏は,その書の「日本語版刊行に寄せて」において,「米国の経営者の関心はWindows 95ではなく,Windows NTに向かっている」と記すとともに,「Microsoftの将来を握っているのは,Windows 95チームではなく,間違いなくWindows NTチームである」と述べています。

 極論すれば,1995年当時は,Microsoft社内の2つのエリート・チームが主導権を争っていたため,同じWindowsシステムでありながら,プログラム内で呼び出すAPI(Application Program Interface:アプリケーション・プログラミング・インタフェース)」仕様が異っていたため,開発者は(不要といえる)余分な苦労を強いられていたわけです。

 私は,2003年10月4日に公開された2つの修正パッチを自分のマシンにインストールしながら,「もしかすると,1995年当時と同じように,余分な苦労を強いられているのでは?」と不安を覚えずにいられませんでした。その不安の原因は,修正パッチのインストーラの不可解な動作にありました。より具体的に表現すれば,複数のインストーラが存在し,それぞれのインストーラの間に整合性がないように思えたのです。

 それでは,このあたりの事情を具体的なサンプル・プログラムを使って考えてみることにします。

図1●修正パッチをインストールするときに最初に表示される画面
 いつものようにサンプル・プログラムをダウンロードし,実行したいところなのですが,まずは,図1[拡大表示]をご覧ください。この画面は,修正パッチをインストールするときに最初に表示される画面です。本連載をお読みいただいている皆さんなら,おそらく,ほぼ全員の方が目にしているはずです。つまり,この画面は多数のWindowsユーザーの目に触れるきわめて重要な画面であり,動作エラーや不注意によるミスは一切許されません。

 しかし残念なことに,この画面には明確な誤情報が含まれています。それは,修正パッチIDです。画面上の赤で囲んだIDの修正パッチはインストールされません。インストールされたパッチのIDは「KB828026」ではなく「Q828026」です。これはあってはならないミスです。

 これまで紹介してきたサンプル・プログラムはIfブロック内で修正パッチIDを分岐条件として多用していますから,このような誤情報はプログラムの生死を握ります。私は第17回サンプル・プログラムを実行して初めてこの不正公開情報に気づきました。皆さんはお気づきになっていましたか?

 私はこの誤情報検出後,「インストールされる情報は本当に大丈夫だろうか?」と不安になりました。あってはならないミスがあったわけですから,このような不安を持っても不思議ではありません。不安内容を文章で詳しく説明していくとかなり長くなりますから,ここでは,今回用意したサンプル・プログラムの実行結果を紹介しながら,解説を進めたいと思います。

図2●サンプル・プログラムの実行結果(Windows 2003 Server環境)
 私は現在,Windows 2003 ServerとWindows XP SP1を日常的に使っています。私はまず,Windows 2003 Server上でサンプル・プログラムを作成してみようと考えました。Windows XPではなく,なぜWindows 2003 Serverを優先させたのか? その理由は単純です。Windows 2003 Serverの方が後から出荷されたOSであり,Windows XP開発経験が生かされた最新OSと(常識的には)考えられるからです。私は,冒頭で紹介したチーム間の主導権争いと同じようなことが,Windows 2003 ServerチームとWindows XPチーム,あるいは,32ビットWindowsチームと64ビットWindowsチームなどの間にも起こっているいるのではないか,とも邪推しました。それでは,Windows 2003 Server環境での実行結果を紹介します(図2[拡大表示])。

 この画面を見ると分かるように,KB828750というパッチIDを持つIE修正パッチがインストールされています。更新されたファイル情報もきちんと報告されています。これは,Windows 2003 Server用の修正パッチ・インストーラが,更新内容をシステム・データベースに記録していることをはっきり示しています。更新内容の記録は後で何か問題があったときに参照する大切な情報です。

 Windows XP SP1でもこのような記録が残されていることを期待したいところですが,たいへん残念なことに,残されていません。Windows XP用修正パッチ・インストーラ,より正確に言えば,32ビット版Windows XP用修正パッチ・インストーラは,更新内容の記録というある意味当たり前のことを行っていないのです。

パッチ・インストーラの修正パッチIDに誤り

 公開ドキュメント情報を読んでみると,64ビット版Windows XP用修正パッチ・インストーラは記録処理をきちんと行っているようです。正直,パッチID「KB828750」を持つ修正パッチの取り扱いになぜこのような違いが出てしまうのか理解に苦しみます。少なくとも,KB828750情報の公開は分かりにくい,といえます。後日お時間のあるとき,今回のサンプル・プログラムをこちらからダウンロードし,Windows XP SP1やWindows 2000など他のOS環境で実行してみてください。

図3●Q828026というIDを持つWindows Media Player関連の修正パッチがインストールされている
 今度は図3[拡大表示]をご覧ください。この画面は,Q828026というパッチIDを持つWindows Media Player関連の修正パッチがインストールされていることを示しています。インストールされたファイル情報もきちんと報告されています。驚いたことに,このQ828026修正パッチ情報は,Windows Server 2003とWindows XP SP1両環境で同じように扱われています。

 この事実を知ると,先に触れたKB828750修正パッチ情報はどうして同じように扱われないのだろう,と考え込んでしまいます。サンプル・コードの機能を説明するときに触れますが,Microsoft社内の各チームは,どのようなインストーラを用意すればよいのか迷っている印象さえ受けます。

 Q828026修正パッチ情報は,前段で述べたように,Windows Server 2003とWindows XP SP1両環境で同じように扱われています。これは分かりやすく歓迎すべきことといえます。ところが,サンプル・プログラムが返してくる更新情報と公開ドキュメント情報を比較してみると,かなりの食い違いがあります。今回のサンプル・プログラムは,Windows 2003 Server環境では次のようなインストール更新情報を返してきます。ちなみに,Windows XP SP1環境でもほぼ同じ情報が返されています。

File: 0
BuildDate: Thu Sep 18 03:56:45 2003
FileName: msdxm.ocx
Location: C:\WINDOWS\system32
Version: 6.4.9.1128

File: 1
BuildDate: Thu Sep 18 03:56:45 2003
FileName: msdxm.ocx
Location: C:\WINDOWS\system32\DllCache
Version: 6.4.9.1128

File: 2
BuildDate: Wed Sep 17 17:25:39 2003
FileName: wmp.dll
Location: C:\WINDOWS\system32
Version: 9.0.0.3075

File: 3
BuildDate: Wed Sep 17 17:25:39 2003
FileName: wmp.dll
Location: C:\WINDOWS\system32\DllCache
Version: 9.0.0.3075

図4●関連ドキュメントのサイト
 このサンプル・プログラム実行結果は,msdxm.ocxとwmp.dllという名称の2種類のファイルが更新されたことを伝えています。ところが,ページの最下段にある「Click」ボタンをクリックして,関連ドキュメントを開くと,2種類のファイルではなく,図4[拡大表示]のような4種類のファイルが更新されていることがわかります。

 もしこれらの4種類のファイルが本当に更新されているなら,修正パッチ・インストーラはなぜその更新事実をシステム・データベースに記録しないのでしょうか? 2つの情報間に矛盾がありますから,たいへん分かりにくい,といえます。修正パッチ・インストーラの一部動作が更新されたと思いますが,その更新は不完全なのではないか,と不安になります。

今回のサンプル・プログラムの機能と拡張上のヒント

 今回のサンプル・プログラムはリスト1のようになっています。基本的な骨格はこれまでのものとまったく同じですから,お時間のあるときに,じっくりお読みください。ソースコードを検討していくと,次のようなコードが記述されていることがわかります。

''''********************************************
''''''''第14回と第17回参照のこと
'KB828750
'IE修正パッチ情報収集コード
'strTargetSP = "SP1"
'strTargetOS = "Windows Server 2003"
''''********************************************

''''********************************************
''''''''本文参照のこと
'KB828026ではなく,Q828026である
'Windows Media Player修正パッチ情報収集コード
strTargetSP = "SP0"
strTargetOS = "Windows Media Player"
''''********************************************

 デフォルトでは,Windows Server 2003とWindows XP SP1両環境でWindows Media Player修正パッチ情報(Q828026)を収集・表示するようなプログラム設定になっています。「Windows Media Player修正パッチ情報収集コード」の追加は,修正パッチ・インストーラが変更されたことを示しています。つまり,これまでのインストーラの一部動作が更新され,新たな情報がWindowsシステム・データベースに追加されるようになったのです。今回はっきりしたように,インストーラの更新は今後は定期的に行われるでしょう。それどころか,大幅に更新される可能性があります。すべての更新は,エンド・ユーザーの立場を考慮したものであってほしいと思います。

 なお,「IE修正パッチ情報収集コード」と「Windows Media Player修正パッチ情報収集コード」を同時に有効にすることはできません。本サンプル・プログラムはこのようにかなり原始的です。しかし原始的であるがゆえに,プログラムの作者である私の意図がはっきり伝わると思います。本サンプル・プログラムは,修正パッチ・インストーラの今後の変化に合わせてさらに更新してゆく予定です。お楽しみに!

 今回は以上で終了です。次回またお会いいたしましょう。ごきげんよう!