Only Neat Thing

たったひとつの冴えたやり方

ユーザ用ツール

サイト用ツール


updates-silent-installer

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

updates-silent-installer [2019/06/19 01:07] (現在)
admin First Sync
ライン 1: ライン 1:
 +======更新プログラムをまとめてインストール======
  
 + [[slipstream-updates]] では、更新プログラムをXPのインストールCDに統合した。ただし、統合できたのは /integrate オプションが有効な更新プログラムだけだ。それ以外の更新プログラムは、XPのインストール後に一つひとつインストールしなければならない。\\
 + IE8、Windows Media Player 11、.NET Frameworkなどをインストールし、さらにそれぞれの更新プログラムをインストールするのはたいへん面倒な作業だ。そこで、**まとめてインストールしてくれるサイレント・インストーラを作ることにした**。\\
 +
 + 以下のスクリプト(BATファイル)で使う環境変数のリストを示す。\\
 +
 +^環境変数^用途^未指定時のデフォルト^
 +|SSTARGET|統合イメージのフォルダ|カレントフォルダ\TARGET|
 +|SSUPDATE|更新プログラムのフォルダ|カレントフォルダ\UPDATE|
 + こういう行が各スクリプトの先頭に置かれる。
 +<code dos>
 +if not defined SSTARGET set SSTARGET=%CD%\TARGET
 +if not defined SSUPDATE set SSUPDATE=%CD%\UPDATE
 +</​code>​
 +
 +=====更新プログラムの準備=====
 +
 + このスクリプトでインストールできるのは、以下の更新プログラムだ。
 +  * [[xp-update-list-ie]] - IE8とUpdateエージェント(IE7/​IE6除く)
 +  * [[xp-update-list-wmp]] - Windows Media Player 11
 +  * [[xp-update-list-net]] - .NET Framework 1.0/​1.1/​3.5/​4
 +  * [[xp-update-list-2]] - その他
 +
 +====ダウンロード====
 +
 + 更新プログラムのダウンロード方法は、[[download-xp-update]]にある。一括ダウンロードスクリプト(BATファイル)を使うと、環境変数**SSUPDATE**で指定したフォルダにダウンロードされる(指定しなければ、カレントフォルダ\UPDATE)。\\
 +
 +====統合イメージ内への配置====
 +
 + 更新プログラムは [[slipstream-updates|統合インストールDVD]] の中に配置することを想定している。統合イメージのフォルダは環境変数**SSTARGET**で指定する。\\
 +
 + 更新プログラムを統合イメージの中にコピーするスクリプトは、こんな感じ
 +
 +<code dos>
 +if not defined SSUPDATE set SSUPDATE=%CD%\UPDATE
 +if not defined SSTARGET set SSTARGET=%CD%\TARGET
 +mkdir %SSTARGET%\UPDATE
 +copy /y %SSUPDATE%\Q282784_WXP_SP1_x86_ENU.exe %SSTARGET%\UPDATE
 +copy /y %SSUPDATE%\WindowsXP-KB923789-x86-JPN.exe %SSTARGET%\UPDATE
 +copy /y %SSUPDATE%\WindowsXP-WindowsMedia-KB2378111-x86-JPN.exe %SSTARGET%\UPDATE
 +・・・
 +</​code>​
 +
 + 具体的には、環境変数SSTARGETで指定したフォルダの下にUPDATEフォルダを作り、そこに環境変数SSUPDATE指定したフォルダにある更新プログラムをコピーしている。
 +
 + 実際のスクリプト(BATファイル)がこちら。
 +
 +<WRAP center round download 90%>
 +{{:​copyaddon.bat|}} - **統合イメージ内への配置スクリプト**
 +</​WRAP>​
 +
 +<​note>​
 + このスクリプトでは、サブフォルダを作って、WMP11/​.NET1.0のインストーラをサブフォルダの中に展開している。どうせインストール時に展開するのだから、あらかじめDVD-Rの中に展開したファイルを配置した方が効率が良いからだ。展開の際に管理者権限を要求するので、XP以外のWindowsで実行する際は、ユーザーアカウント制御の画面に煩わされないよう、コマンドプロンプトを管理者として実行した方が良いだろう。\\
 +</​note>​
 +
 + copyaddon.batは、[[slipstream-updates]] でISOイメージを作る前に実行すると良い。[[slipstream-updates#​統合まとめ]] で、\\
 +  **SSINIT.bat → SSSP3.BAT → make.bat**\\
 + としているのを、\\
 +  SSINIT.bat → SSSP3.BAT → make.bat **→ copyaddon.bat**\\
 + の順で実行する。copyaddon.bat によって、約1GBのファイルがコピーされるはずだ(これによって、統合インストールISOのサイズは約2GBへと倍増する)。\\
 +
 +====サイレント・インストーラの配置====
 +
 + サイレント・インストーラはこちら。
 +
 +<WRAP center round download 90%>
 +{{:​update.vbs|}} - **更新プログラム・サイレント・インストーラ**
 +</​WRAP>​
 +
 + これを、統合イメージのフォルダ(%SSTARGET%の指定するフォルダ)に配置する。copyaddon.batが%SSUPDATE%\update.vbsを%TARGET%にコピーしてくれる。\\
 +
 + あとは従前通りに、ISOイメージを作成し、DVD-Rに書き込み、XPをインストールする。\\
 +
 +=====サイレント・インストーラの起動=====
 +
 + XPのインストールが終わったら、サイレント・インストーラを起動する。update.vbsはVBScriptだが、WScriptで実行するようにはできていないので、ダブルクリックで起動することはできない。コマンドプロンプトからcscript.exeを使って起動する。\\
 + DVDドライブはたいていDドライブになっていると思われるので、\\
 +
 +<code dos>
 +cscript D:​\update.vbs
 +</​code>​
 +
 + というコマンドラインになるだろう。\\
 +
 +<code dos update.bat>​
 +cscript .\update.vbs
 +</​code>​
 +
 + いちおう、BATファイルも作ってみた。\\
 +
 + インストール後に再起動を要求する更新プログラムが多いので、何度も再起動しながら続きを実行していく。すべての更新プログラムがインストールされるまで数時間を要する。**更新プログラムのインストール終了**と表示されれば終了だ。\\
 +
 + 更新プログラムは、update.vbsのあるフォルダの下のUPDATEフォルダ(通例D:​\UPDATE)に配置されている前提だ。他のフォルダに配置している場合には、環境変数SSUPDATEで指定する。\\
 +
 +====インストールする更新プログラムの選択====
 +
 +<code vbscript>​
 +'​インストール オプション(それぞれTrue/​Falseを設定してください)
 +Const I_SEARCH4 = True '​Windows Search 4.0
 +Const I_SILVERLIGHT = True '​Microsoft Silverlight
 +Const I_MBSA = True '​Microsoft Baseline Security Analyzer
 +Const I_WMP11 = True '​Windows Media Player 11
 +Const I_NET10 = True '​.NET Framework 1.0
 +Const I_NET11 = True '​.NET Framework 1.1
 +Const I_NET35 = True '​.NET Framework 3.5
 +Const I_NET4CP = True '​.NET Framework 4 Client Profile
 +Const I_NET4F = True '​.NET Framework 4 Full
 +Const I_PSHELL = True '​Windows PowerShell 2.0 (要I_NET35)
 +' I_NET4CPとI_NETFを両方Trueにした場合は、Full版のみインストールされます
 +</​code>​
 +
 + update.vbsの30行目あたりに、インストールする更新プログラムを選択するオプションがある。メモ帳などで、これを編集すれば、Falseに設定した更新プログラムはインストールを省略するようになっている。\\
 + (IE8その他のインストールを抑制するオプションはないので、必要ならばスクリプトを直接編集して欲しい)。\\
 +
 +====ログファイル====
 +
 + update.vbsはログファイルを作る。ファイル名は**update.log**で、update.vbsの置かれているフォルダに作ろうとするが、DVD-Rに配置している場合は書き込みできないので、環境変数TEMPで指定されるフォルダに作る。
 +
 +=====技術情報=====
 +
 + update.vbsを書くのに調べた情報などをメモしておく。\\
 +
 +====再起動====
 +
 + 更新プログラムが正常にインストールされたかどうかは、終了コードを見ればわかる。0ならば正常終了、0以外ならば異常終了だ。ただし、下位16ビットが十進で3010(16進で0x0bc2)の場合は「インストールは正常に終了したが再起動が必要」という意味だ。再起動せずに次の更新プログラムをインストールしようとしてもエラーになってしまうので、再起動せざるを得ない。\\
 +
 +<​blockquote>​
 +**ERROR_SUCCESS_REBOOT_REQUIRED**\\
 + 3010 (0xBC2)\\
 + The requested operation is successful. Changes will not be effective until the system is rebooted.\\
 +<​cite>​[[https://​msdn.microsoft.com/​en-us/​library/​ms681386.aspx|System Error Codes (1700-3999)]] (microsoft)</​cite>​
 +</​blockquote>​
 +
 + 再起動後もスクリプトが実行し続けられるように、HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce に自分自身をセットしてから、shutdownコマンドを使って再起動している。\\
 + 環境変数SSUPDATEが再起動によって失われないように、User環境変数にSSUPDATEをセットしている(更新プログラムをインストールし終えたら、User環境変数のSSUPDATEを削除している)。\\
 +
 +====更新プログラムがインストールされているか====
 +
 + 再起動してスクリプトを先頭から実行した場合、すでにインストール済みの更新プログラムを再度インストールする無駄を避けるために、「その更新プログラムがインストールされているか」をチェックしている。\\
 +
 + 更新プログラムのインストール情報は、レジストリの2か所に保存されている。\\
 +
 + ひとつは、レジストリの **HKLM\SOFTWARE\Microsoft\Windows\Current Version\Uninstall** 以下にあるもので、サブキーがKB番号になっている場合が多い。それぞれのサブキーの下にDisplayNameという文字列値があり更新プログラムの名前が保存されている。\\
 +<​note>​
 + サブキー名がUUID(128ビットの16進数)になっていて、(既定)の値にKB番号が入っているものもある。これはおそらく、すでに新しい更新プログラムがインストールされているのに、古い更新プログラムをインストールしないようにするための仕組みだろう。\\
 +</​note>​
 +
 + もうひとつは、**HKLM\SOFTARE\Microsoft\Windows\Updates** 以下にあるもので、こちらもサブキーがKB番号になっている場合が多い。更新プログラムの名前は、Description あるいは PackageName という値に保存されている。\\
 +
 + 数は少ないが、片方にしかインストール情報が保存されていない更新プログラムがあるので、両方チェックするようにしている。まれに、どちらにも情報が保存されない更新プログラムもあり、その場合は、インストールされているかどうかを別の方法でチェックしなければならない。その方法については、下記で個別に説明している。\\
 +
 +====更新プログラムごとの情報====
 +
 +===Windows Media Player 11===
 + %SSUPDATE%\WMP11に以下の四つのインストーラがあるかチェックし、なければインストーラ(wmp11-windowsxp-x86-ja-jp.exe)を展開して作成する。
 +|umdf.exe|Microsoft User-Mode Driver Framework Feature Pack 1.0|
 +|WindowsXP-MSCompPackV1-x86.exe|Microsoft Compression Client Pack 1.0 for Windows XP|
 +|wmfdist11.exe|Windows Media Format 11 runtime|
 +|wmp11.exe|Windows Media Player 11|
 +
 + インストーラをダウンロードセンターからダウンロードした場合、**KB941776・KB939683・KB929399・KB954154**はインストーラに含まれているため、別途インストールする必要はない(wmp11-windowsxp-x86-ja-jp.exeのバージョンが11.0.5721.**5262**)。一方、Updateカタログからダウンロードしたバージョン(11.0.5721.**5145**)では、この四つは別途インストールが必要だ。(参照:[[xp-update-list-wmp#​wmp11インストーラに含まれている更新]])\\
 +
 + **KB941569・KB973540・KB954155・KB952069・KB978695・KB975558・KB2378111**については、WMP11をインストールした際に、必ずインストールしている。すでに[[slipstream-updates]]でXPのインストールISOに統合してあるものも含まれているが、再度インストールしている。\\
 +
 +===.NET Framework 1.0===
 +
 + あらかじめ dotnetredist.exe を展開してNDP1.0フォルダに dotnetfx.exe を作っておく。さらに dotnetfx.exe を%TEMP%\NDP1.0に展開して netfx.msi を作り、これを使ってインストールする。%TEMP%に展開するのは、インストーラが書き込み可能なフォルダに配置されていないとエラーになるから、である。\\
 +
 + .NET Framework 1.0には他にも、KB979904 (MS10-041)・KB2604042 (MS12-035)・KB2698035 (MS12-074)・KB2742607 (MS13-004)・KB2833951 (MS13-052)・KB2904878 (MS14-009) という更新プログラムがあるが、いずれもMedia Center Edition か Tablet PC Edition のみサポートしており、普通のXPにはインストールできない。なので、このスクリプトではサポートしていない(将来的にはサポートするかも)。\\
 +
 +<​note>​
 + もともと.NET Framework 1.0は、Media CenterかTablet以外ではほとんど使われておらず、普通のXPには1.0そのものがインストール不要かもしれない(Windows Updateでもインストール候補に挙がらないし)。
 +</​note>​
 +
 +===.NET Framework 1.1===
 +
 + dotnetfx.exe を%TEMP%\NDP1.1に展開して netfx.msi を作り、これを使ってインストールする。日本語 Language Packについても同様に、langpack.exe を展開し、langpack.msiを使ってインストールする。\\
 +
 +===.NET Framework 3.5====
 +
 + .NET Framework 3.5をインストールすると、同時に2.0と3.0もインストールされる。
 +
 +==KB2604092/​KB2742596==
 +
 + 2.0のセキュリティ更新プログラム **KB2604092** と **KB2742596** の関係がややこしい。\\
 + Windows Updateでは、KB2604092→KB2742596の順にインストールされる。ところが、KB2742596のインストール時に、HKLM\SOFTARE\Microsoft\Windows\UpdatesにあるKB2604092のインストール情報は削除されてしまうのだ。KB2742596がKB2604092を置き換える後継プログラムであるならば、古い更新プログラムのインストール情報が削除されるのは理解できるのだが、それだとWindows Updateで両方ともインストールされる理由がわからない。\\
 +\\
 + やむなく、このサイレント・インストーラでは、HKLM\SOFTARE\Microsoft\Windows\Updatesをみて、KB2604092→KB2742596の順にインストールされるようにしている。\\
 +
 +==KB982524/​KB976576/​KB977354==
 +
 + ダウンロードセンターからはKB982524がダウンロードできるが、UpdateカタログからはKB982524としてKB976576とKB977354の二つがダウンロードされる。KB982524をインストールすると、KB976576とKB977354のインストール情報が作成される。\\
 + そこで、KB976576とKB977354の両方ともインストールされていない状態で、KB976576のインストーラがあればそれをインストールし、そうでなければ、KB976576とKB977354をインストールしている。
 +
 +===KB968930/​Windows PowerShell 2.0===
 +
 + PowerShell 2.0には、.NET Framework 2.0 SP1が必要なので、.NET Framework 3.5のインストールをする場合にのみインストールできるようにしている。
 +
 +===Uninstallにしかインストール情報がないもの===
 +  * KB923789: Adobe の Macromedia Flash Player の脆弱性により、リモートでコードが実行される
 +  * Internet Explorer 8
 +  * Microsoft Silverlight
 +  * Microsoft Baseline Security Analyzer 2.3
 +  * Microsoft .NET Framework (JPN)/.NET Framework 1.0
 +
 +===Updatesにしかインストール情報がないもの===
 +  * Microsoft .NET Framework 1.0 Service Pack 3 (KB867461)
 +
 +===UninstallとUpdatesで違う名前になっているもの===
 +^Current Version\Uninstall^Updates^
 +|Windows Search 4.0|KB940157|
 +
 +===UninstallとUpdatesのどちらにもないもの===
 +
 +==VistaFont/​Windows XP 向け ClearType 対応メイリオ バージョン 5.00==
 + フォントファイル %windir%\Fonts\meiryo.ttc が存在すればインストール済みと判断。
 +
 +==KB2607070/​Windows Update エージェント バージョン 3.0==
 + %windir%\system32\wuaueng.dll のバージョンが7.6.7600.243以降ならインストール済みと判断。
 +
 +==ZP81UPDW/​Microsoft IME 2002 郵便番号辞書更新 2008 年 11 月版 (Windows XP 用)==
 + HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IMEJP\8.1\version\imjpzp.dic にあるバージョン番号が8.0.5416.0以降ならインストール済みと判断。
 +
 +==KB2836941==
 + KB2836941は、HLKM\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\DC3BF90CC0D3D2F398A9A6D1762F70F3\Patches\CCA3C58B75487533687B8B1ECAC3586C にあるインストール情報をチェックしている。\\
 +
 +==KB2836940==
 +
 + KB2836940は、SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\26DDC2EC4210AC63483DF9D4FCC5B59D\Patches\14E8170F37C90073891DF293B7757A56 にあるインストール情報をチェックしている。\\
 +
 +=====実行後=====
 +
 + Update.vbsの実行には、ThinkPad X21で約5時間、3.2GHzのCore i5の仮想環境でも約3時間かかった。
 +
 +{{  :​afterupdate.jpg?​nolink ​ |}}
 +
 + 実行後、WindowsUpdateを実行すると、更新プログラムがすべてインストールされているのがわかる。\\
 + <wrap lo>​(RTM版の場合、update.vbsから外してあるKB905474(WGA通知アプリケーション)が通知される)</​wrap>​。
 +
 + [[https://​support.microsoft.com/​ja-jp/​help/​282784/​qfecheck-exe-verifies-the-installation-of-windows-2000-and-windows-xp|Qfecheck.exe]]で検証すると、エラーは報告されなかった(Qfecheck.exeはupdate.vbsでインストールされる)。\\
 +
 +----
 +~~DISCUSSION|コメント欄~~
updates-silent-installer.txt · 最終更新: 2019/06/19 01:07 by admin

ページ用ツール