ワンポイント.NET管理テク
── ここが気になる.NET管理のヒント ──

第3回 .NET Framework 2.0ランタイムのインストール
― ネットワーク共有フォルダ編 ―

デジタルアドバンテージ 島田 広道
2007/06/27

 第2回では、エンドユーザーを対象に、Windows Update(Microsoft Updateを含む)を利用して.NET Framework 2.0ランタイムをインストールする方法を紹介した。システム管理者にとっても、Windows Updateによるインストールは特にセットアップの必要がなく手軽で便利だが、その半面、組織内で網羅的に運用する場合はデメリットもある。

 まず、クライアントPCがインストール・パッケージをそれぞれダウンロードするため、クライアントPCの台数が多いと、インターネット接続の帯域を圧迫しやすい。また、インストール時にユーザーが逐一操作する必要があるため、操作ミスによってインストールに失敗する危険性がある。さらに、決して多いことではないが、負荷の集中などによってWindows Updateのサイトの調子が悪くなると、インストールが全面的に滞ってしまう。

 そこで、.NET Framework 2.0ランタイムのインストール・パッケージをLANの内部にあるネットワーク共有フォルダに配置して、ここからユーザーにインストールしてもらえば、インターネット接続帯域を圧迫せずに済む。Windows Updateサイトの不調にも影響されない。また、ちょっとしたバッチ・ファイルを記述して、ランタイムやセキュリティ・パッチなど複数のインストール・パッケージをまとめて自動的にインストールできるようにすれば、ユーザーの操作ミスによるトラブルも減らせる。

 本稿では、企業などの組織内LANに接続された複数のクライアントPCを対象に、ネットワーク共有フォルダを利用して.NET Framework 2.0ランタイムをインストールする方法を紹介しよう。ネットワーク共有フォルダさえ利用できれば、Active Directoryでもワークグループ構成でも運用できるし、高度なツールも不要である。

インストール前の注意

 Windows Update利用の場合と同様に、本稿ではエンドユーザーが.NET Framework 2.0ランタイムのインストールを実行する。そのため、エンドユーザーのアカウントに管理者権限を持たせる必要がある。

 また、クライアントPCにはあらかじめWindows Installer 3.1をインストールしなければならない。.NET Framework 2.0のセキュリティ・パッチのインストールに必須だからだ。Windows Update/Microsoft Updateや自動更新、WSUSを運用しているのであれば、すでにWindows Installer 3.1はインストールされている。またWindows Server 2003 SP1以降にもWindows Installer 3.1はインストール済みだ。手動でインストールするには、以下のダウンロード・ページからインストール・パッケージを入手すればよい。

 Windows Vistaには最初から.NET Framework 3.0ランタイムがインストール済みなので、改めて.NET Framework 2.0ランタイムをインストールする必要はない。

 そのほか、.NET Framework 2.0ランタイムのインストールに必要な条件や事前の準備・確認については、第2回の「インストール前の準備と確認」を参照していただきたい。

インストールの手順

 本稿で紹介する.NET Framework 2.0ランタイムのインストール方法を大ざっぱにまとめると、以下のような手順になる。

  1. インストール・パッケージをダウンロードする
  2. インストール・パッケージが壊れていないことを確認する
  3. インストール用のネットワーク共有フォルダを用意する
  4. 自動インストール用のバッチ・ファイルを用意する
  5. クライアントPCでバッチ・ファイルを実行する

 1.から4.までは、インストール用のネットワーク共有フォルダにかかわる作業、すなわち管理者が担当する作業だ。一方、ユーザーが行う作業は5.だけであり、その負担は軽い。

 それでは順番に各手順を説明していこう。

インストール・パッケージをダウンロードする

 本稿で必要とする.NET Framework 2.0ランタイム関連のインストール・パッケージは以下の4つである。このうち2つのセキュリティ・パッチは2007年6月時点で必要十分なものだ。いずれもマイクロソフトのダウンロード センターから入手できる。

 余談だが、ダウンロード・センターで検索を行うと、ベータ版やプレリリース版、あるいはほかの言語やプラットフォーム(x86/x64など)向けのソフトウェアが見つかることがよくある。ページ・タイトルだけだと区別がつかないこともあるので、個別のダウンロード用Webページの内容に目を通して、間違えないようにダウンロードしよう。

 上記の各Webページからインストール・パッケージをダウンロードするには、[ダウンロード]というボタンをクリックする。複数の[ダウンロード]ボタンが並んでいる場合は、併記されているファイル名からダウンロードすべきファイルを判断する必要がある。例えば本稿では、32bit Windows、すなわちx86版を対象プラットフォームとしているので、「X86」という文字列を含むファイル名を選択する。x64 EditionのWindowsなら「X64」を含むファイルを選べばよい。

.NET Framework 2.0ランタイムのダウンロード用Webページ
インストール・パッケージをダウンロードするだけではなく、関連情報のWebページやインストールに必要な条件も確認できる。
  このボタンをクリックすると「ファイルのダウンロード」のダイアログ・ボックスが表示されるので、[保存]ボタンをクリックしてインストール・パッケージを保存する。
 
セキュリティ・パッチのダウンロード用Webページ
これはMS06-033(KB917283)の.NET Framework 2.0向けセキュリティ・パッチの例。スクロールすると複数の[ダウンロード]ボタンが表示されるので、対象のプラットフォームに合わせて選択する。
  32bit Windows(x86版)であれば、このように「X86」という文字列を含むファイル名が付けられている。
  このボタンをクリックすると32bit Windows向けセキュリティ・パッチがダウンロードできる。

 これで以下の4つのインストール・パッケージがダウンロードできたはずだ。

  • dotnetfx.exe: .NET Framework 2.0ランタイム本体
  • langpack.exe: 日本語Language Pack
  • NDP20-KB917283-X86.exe: MS06-033(KB917283)のセキュリティ・パッチ
  • NDP20-KB922770-X86.exe: MS06-056(KB922770)のセキュリティ・パッチ

インストール・パッケージが壊れていないことを確認する

 インストール・パッケージをダウンロードし終えたら、正常にダウンロードできたことを確認する。インターネットでは、ファイルをダウンロードする際には特にエラーがなかったにもかかわらず、ダウンロードしたファイルが壊れていることがある。

 前述の4つのインストール・パッケージには、いずれもマイクロソフトによってデジタル署名が付けられている。もしインストール・パッケージが壊れるとデジタル署名は無効になるので、デジタル署名の状態を確認すれば簡単にファイルが壊れているか否かを判断できる。

 デジタル署名を確認するには、ダウンロードしたインストール・パッケージのプロパティから[デジタル署名]タブを選んで[詳細]ボタンをクリックすればよい。「このデジタル署名は問題ありません。」と表示されれば、インストール・パッケージは壊れていないと判断できる。

インストール・パッケージのデジタル署名を確認する
デジタル署名の状態を確認するには、まずWindowsエクスプローラでインストール・パッケージ(ここではdotnetfx.exe)を右クリックし、[プロパティ]を選んで表示された画面にて[デジタル署名]タブを選択する。このタブが表示されない場合は、元からデジタル署名が付いていない(パッケージを間違えている)か、デジタル署名の存在をまったく確認できないくらいひどく壊れているか、のいずれかであるので、再度ダウンロードを試してみよう。
  まず[署名の一覧]にあるデジタル署名を選択する。
  するとこの[詳細]ボタンがクリックできるようになるので、クリックするとデジタル署名の詳細が表示される(以下の画面を参照)。
 
有効なデジタル署名の例
このように「このデジタル署名は問題ありません。」と表示されれば、インストール・パッケージも正常といえる。
 
無効なデジタル署名の例
このように「このデジタル署名は有効ではありません。」と表示される場合、インストール・パッケージは壊れているので、再度ダウンロードを試してみよう。

 4つのインストール・パッケージすべてについて、デジタル署名が有効であることを確認しておこう。

インストール用のネットワーク共有フォルダを用意する

 インストール・パッケージの準備ができたら、それらをクライアントPCに公開するためのネットワーク共有フォルダを用意しよう。それにはまず、Windowsのファイル共有サービスを提供するサーバが必要だ。インストール対象のクライアントPCからアクセス可能なファイル・サーバが設置済みであれば、それを利用するのがよいだろう。ただし、このサーバには同時に複数のクライアントPCから集中的にアクセスされる可能性があるので、接続先のネットワークの帯域およびハードウェアの性能に余裕のあるマシンが望ましい。

 サーバを決めたら、インストール・パッケージを配置するネットワーク共有フォルダを作成する。ここで注意すべきは、そのフォルダのアクセス権である。インストール・パッケージを配置するフォルダには、クライアントPC上でインストールを行うユーザー・アカウントに対して、[読み取りと実行][フォルダの内容の一覧表示][読み取り]のアクセス権限を与え、[変更][書き込み]の権限を外しておこう。これはインストール・パッケージをむやみに書き換えられないように保護するためだ。もちろん管理者には、フルコントロールなど管理のための権限を与えておく必要がある。

インストール・パッケージを配置するフォルダのアクセス権
クライアントPC上でインストールを行うユーザー・アカウントはUsersグループに属していると想定して、これに[読み取りと実行][フォルダの内容の一覧表示][読み取り]の権限だけを与えている。これにより、一般ユーザーによるインストール・パッケージの書き換えといった事故を防ぐ。一方、管理者(Administrators)およびローカル・システム・アカウントには、管理のためにフルコントロール権限を与えている。

 アクセス権のほかは、通常のファイル共有と比べて特に違いはない。ほかのサービスに支障がなければ既存の共有を利用してもよいだろう。

 本稿では、.NET Framework 2.0ランタイムのインストール・パッケージを配置するフォルダの構成および共有を以下のように設定している。

  • サーバ上のフォルダのパス
     C:\FileShare\Install\dotNET20
  • ネットワーク共有フォルダのパス
     \\Server001\Install\dotNET20
     Server001」がサーバ名、「Install」が共有名。

 実際には、後述する自動インストール用のバッチ・ファイルのみdotNET20フォルダに配置し、4つのインストール・パッケージはdotNET20フォルダにx86というサブフォルダを作成して配置している。ユーザーに対して実行可能ファイルとしてバッチ・ファイルだけを見せることにより、誤ってインストール・パッケージを実行するというミスを減らすためだ。

 アクセス権および共有の設定を終えたら、用意したネットワーク共有フォルダ(本稿では\\Server001\Install\dotNET20\x86)に4つのインストール・パッケージをコピーしよう。

自動インストール用バッチ・ファイルを用意する

 次は、4つのインストール・パッケージを順番にインストールするためのバッチ・ファイルを用意する。これにより、インストールを実行するユーザーの負担が軽減できる。基本的には、以上のパッケージをエンドユーザー自身で起動してインストールしてもよいのだが、どの順番でインストールするか、対象となるパッケージがすでにインストールされているかどうか、インストールが成功したかどうか、などをエンドユーザーが自分で判断するのは容易ではないので、このようなバッチ・ファイルを利用するのがよい。

■インストール用バッチ・ファイルのカスタマイズ
 まずは、以下のリンクから自動インストール用バッチ・ファイルをダウンロードしていただきたい。

 このZIPファイルからInstdn20x86.txtというファイルを展開したらテキスト・エディタで開き、13行目付近にある、インストール元フォルダのパスを表す環境変数SrcDirの値を変更する。具体的には、インストール・パッケージを配置したネットワーク共有フォルダへのUNCパス(本稿では\\Server001\Install\dotNET20\x86)に書き換える。

set SrcDir=\\Server001\Install\dotNET20\x86
インストール・パッケージを配置したネットワーク共有フォルダへのUNCパスに書き換える

 上記の書き換えを終えたら、Instdn20x86.txtをInstdn20x86.cmdにリネームして、ネットワーク共有フォルダ(本稿では\\Server001\Install\dotNET20)にコピーすればよい。

■追加のセキュリティ・パッチへの対応
 なお、インストールすべきセキュリティ・パッチが増えたり変わったりした場合は、そのインストール・パッケージを用意するだけではなく、自動インストール用バッチ・ファイルにおけるセキュリティ・パッチのインストール部分も追加または修正する必要がある。具体的には、以下のようなコードを記述する。

※ファイルInstdn20x86.txtからの抜粋

REM ----- MS06-033(KB917283)のセキュリティ・パッチのインストール
:KB917283
echo %InstPackage%のインストールは完了しました。
echo.

set InstPackage=MS06-033(KB917283)のセキュリティ・パッチ
echo %InstPackage%のインストールを始めます。

REM ----- インストールを確認するレジストリ・キーのエクスポート
regedit /E "%TempDir%\KB917283.reg" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Microsoft .NET Framework 2.0\KB917283"
REM ----- エクスポートしたテキストの検索とインストール状態の検出
find /I """Installed""=dword:00000001" "%TempDir%\KB917283.reg" 1>nul 2>nul
REM ----- インストール済みであればインストールをスキップ
if not errorlevel 1 goto KB922770

REM ----- サイレント・インストール
%SrcDir%\NDP20-KB917283-X86.exe /quiet /norestart /L*v %SystemRoot%\NDP20-KB917283-X86.log
REM ----- エラーがなければ次のパッケージのインストールへ
if not errorlevel 1 goto KB922770
REM ----- 再起動が要求されたらインストールを中断
if errorlevel 3010 if not errorlevel 3011 goto ReqReboot
REM ----- そのほかのエラーの後処理へ
goto ERR_Fatal

 このリストはMS06-033(KB917283)のセキュリティ・パッチをインストールする部分を抜き出したものだ。もし別のセキュリティ・パッチのインストールを追加するなら、この部分をコピーして挿入し、最低でもラベル(「:KB917283」など)やMSセキュリティ番号、MSKB番号を修正しなければならない。特に注意すべき点を以下に記す。

regedit /E "%TempDir%\KB917283.reg" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Microsoft .NET Framework 2.0\KB917283"
インストールの有無を検出するためのレジストリ・キー
find /I """Installed""=dword:00000001" "%TempDir%\KB917283.reg" 1>nul 2>nul
インストールの有無を検出するためのレジストリの値とデータ

 これはすでにセキュリティ・パッチがインストールされているかどうかをテストするためのコードだ。レジストリ・エディタで特定のレジストリ・キーを書き出し、Installedという値がセットされているかどうかをテストしている。たとえセキュリティ・パッチのインストーラの仕様が従来と変わっていなくても、レジストリ・キーのMSKB番号(「KB917283」)は該当するものに差し替えなければならない。仕様が変更された場合は「""Installed""=dword:00000001」の部分も修正する必要があるかもしれない。

%SrcDir%\NDP20-KB917283-X86.exe /quiet /norestart /L*v %SystemRoot%\NDP20-KB917283-X86.log
サイレント・インストールのオプション

 これは対話的操作なしでセキュリティ・パッチをサイレント・インストールするためのコマンドラインである。ログファイル名(「NDP20-KB917283-X86.log」)に含まれるMSKB番号はもちろん修正すべきだ。またセキュリティ・パッチのインストーラの仕様が変更された場合は、サイレント・インストールのオプションまで変わる可能性がある。

 セキュリティ・パッチの検出条件やインストール・オプションは、マイクロソフトのTechNetセキュリティ情報で確認できるので、必要に応じて修正していただきたい。

クライアントPCでバッチ・ファイルを実行する

 これで.NET Framework 2.0ランタイムをインストールする準備は完了したので、実際にクライアントPCから.NET Framework 2.0ランタイムのインストールを実行してみよう。

 まず、ローカルAdministratorsグループに所属するユーザー・アカウントでクライアントPCのWindows OSにログオンする。次にWindowsエクスプローラで自動インストール用バッチ・ファイル(Instdn20x86.cmd)のあるネットワーク共有フォルダ(本稿では\\Server001\Install\dotNET20)を開く。あとはInstdn20x86.cmdをダブルクリックして、インストールの完了を待つだけだ。インストールにかかる時間はクライアントPCの性能に大きく依存するが、Celeron 1.7GHz搭載のデスクトップPCで試したところ、約12分で終了した。

自動インストール用バッチ・ファイルによる.NET Framework 2.0ランタイムのインストール
Instdn20x86.cmdを実行すると、このようなコマンドプロンプトの画面が表示される。
  UNCパスにあるバッチ・ファイルを起動すると、このエラーメッセージが必ず表示される。インストールには影響しないので無視してよい。
  このメッセージが表示されたらインストールは完了しているので、何かキーを押して画面を閉じる。

 もしインストールの最中にエラーが発生した場合は、以下の画面のように終了コードが表示されるので、あらかじめエンドユーザーにはこの終了コードを管理者に伝えるように指示しておく。終了コードの意味は、以下のマイクロソフトのWebページに記されている。

自動インストール用バッチ・ファイルの実行時にエラーが発生した例
日本語Language Packのインストール中に終了コード1603のエラー(「致命的なエラー」を意味する)が発生したことが分かる。この終了コードを手掛かりにトラブルの原因を探ることが可能だ。

 またインストール時のログファイルが%SystemRoot%に以下のファイル名で作成されるので、トラブルの発生時に確認するとよい。

  • dotnetfx20-x86.log: .NET Framework 2.0ランタイム本体
  • langpack20-x86-jpn.log: 日本語Language Pack
  • NDP20-KB917283-X86.log: MS06-033(KB917283)のセキュリティ・パッチ
  • NDP20-KB922770-X86.log: MS06-056(KB922770)のセキュリティ・パッチ

 このほか、まれではあるがインストール中にコンピュータの再起動が要求されることがある。このとき自動インストール用バッチ・ファイルはいったんインストールを中断するので、その後にエンドユーザーには手動でコンピュータの再起動を実行させる。その後、再びエンドユーザーに自動インストール用バッチ・ファイルを実行させると、インストール済みのインストール・パッケージは自動的にスキップされ、残りのインストールが継続される。

 ネットワーク共有フォルダを利用した本稿のようなインストール方法は、ある意味「原始的」ともいえるが、その分実現するための敷居は低く、手軽である。また自動インストール用バッチ・ファイルについてはログオン・スクリプトなどを利用して、さらなる自動化や管理工数の低減に役立てていただければ幸いだ。End of Article

 
     
目次ページへ  「ワンポイント.NET管理テク」
Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

スキルアップ/キャリアアップ

.NET管理者虎の巻

- PR -
- PR -