.NET Framework 4.7のオフラインインストール失敗の解決とインストーラーを解凍するコマンド

.NET Framework 4.7のオフラインインストールの失敗は、インストーラーを解凍してからインストールすることで解決できたのでメモ。

ここではWindows 7でのインストールを例にしていますが、Windows 10/8.1/8でも共通です。

オフラインインストーラーでは必ずインストール失敗する

まずはオフラインインストールの失敗から説明します。オンラインではなく、ダウンロードしてきた.NET Framework 4.7(KB3186497)のオフラインインストーラーでインストールしようとするといろいろエラーが出て必ず失敗します。 オフラインでも単体でインストールできるのがオフラインインストーラーじゃないのか?と思ってるんですが違うのでしょうか?

エラー1:インストールブロック

最初のエラーは.NET Framework 4.7(KB3186497)と依存関係にあるD3DCompiler_47.dllC:\Windows\system32にないために起こるインストールがブロックされるエラーです。以下はクリーンインストールしたばかりのWindows7でのエラー画面です。

解決方法はKB4019990をインストール

KB4019990をインストールすることでこのエラーは解決できます。このことは以下の「Windows用の.NET Frameworkの4.7オフラインインストーラーページ」にも書いてあります。 なぜ.NET Framework 4.7(KB3186497)に含めず、別に入れないといけないのか不思議です。

エラー2: 証明書がない

これでセットアップ作業が進むのですが、最後に「インストールが正常に完了できませんでした。」となります。

その理由は「証明書チェーンを、信頼されたルート機関として構築できませんでした。」とのこと。 以下のページによるとあらかじめ証明書をダウンロードして登録すればいいと手順を含めて記載があります。なんだか面倒くさいので、それで本当にインストールがうまくいくのかは試してません。

サイレントインストールでもダメだった

コマンドプロンプトからc:\NDP47-KB3186497-x86-x64-AllOS-ENU.exe /?でセットアップファイルのヘルプを見ると、Quietモードというのがあったので、

c:\NDP47-KB3186497-x86-x64-AllOS-ENU.exe /q

を実行してみましたが、何の表示もなくインストールが静かに進み、エラー表示もなく静かに失敗に終わりました。

できればスムーズにインストールしたい

解決方法があるとはいえ、余計な証明書を入れたくないし、もっとスムーズにインストールしたいのです。 オフラインインストールなんだから手間なく一発でインストールを完了させたいですよね。インストール作業がいつも解凍から始まるのでそこもスキップしたいのに、これ以上手順が増やしたくないんです。

そこで思いついたインストーラーの解凍

オフラインインストーラーを起動させると、いつもしばらく解凍を待たされます。解凍されたファイルの中身はどうなっているだろう?解凍後に出てくるインストーラーを保存しておけば、次回からはうっとうしい解凍の待ち時間もなくらるし、一発でインストールできる方法も見つかるんじゃないか?と思いいろいろ探したら方法がありました。

解凍するコマンド

以下のコマンドでオフラインインストーラーを解凍を開始できます。

ダウンロードしてきたオフラインインストーラーNDP47-KB3186497-x86-x64-AllOS-ENU.exeをCドライブ直下に置いたときの例です。

C:\NDP47-KB3186497-x86-x64-AllOS-ENU.exe -x
または
C:\NDP47-KB3186497-x86-x64-AllOS-ENU.exe /extract

コマンドを実行すると解凍先を指定するダイアログが出ます。ここでは、仮にc:\dotonet47というフォルダを作成して解凍します。[Browse]ボタンで解凍先フォルダを選択するか、ファイルパスを入力します。

フォルダを選択して[OK]を押すと解凍が始まります。

解凍先にはたくさんのファイルが展開されます。

コマンドラインスイッチについての参考

解凍のためのコマンドラインスイッチの詳しくは以下を参考にしてください。バッチファイルなどで使うときに役立ちます。

ちなみに、今回は.exe形式のファイルの解凍ですが、.msi形式のファイルを解凍する場合はmsiexec .msu形式の場合はwusaをコマンド操作して解凍できます。

解凍ファイルからインストール

セットアアップの実行

その中にある以下のファイルをセットアップファイルを実行します。(注意:同じフォルダ内にあるsetup.exeは使いません。)

  • 32ビットOSの場合 netfx_Full_x86.msi
  • 64ビットOSの場合 netfx_Full_x64.msi

ダブルクリックしたらダイアログなしでいきなりインストールが始まります。

旧バージョンの.NET Frameworkがある場合、自動で削除されます。言語パックは削除されないので、別途削除するか.NET Framework 4.7の言語パック(KB3186499)をインストールして旧バージョンの言語パックをアップデートする必要があります。

これでインストール完了。インストールが完了したら再起動します。

本当にインストール完了しているか確認

再起動後、C:\Windows\Syatem32を確認してみると、KB4019990を入れていないのにD3DCompiler_47.dllが入っていました。他にも関連するDLLがたくさん入っていました。

[コントロールパネル]-[プログラムと機能]にもちゃんと「Microsoft .NET Framework 4.7」の文字がありました。

言語パックのインストール

あとは.NET Framework 4.7の言語パック(KB3186499)をインストールすれば完了です。.NET Framework 4.7の言語パック(KB3186499)をオフラインインストールするインストーラーは以下からダウンロードできます。

言語パックのオフラインインストールに失敗するとき(2017/08/28追記)

言語パック(KB3186499)のオフラインインストールは他の準備が必要です。その準備ができていないとオフラインインストーラーだけでは失敗します。解決方法は以下にまとめていますので、ご参照ください。

まとめ

これで、Windowsのパソコンをクリーンストールしたり、リカバリして工場出荷時の状態にしてからいきなり.NET Framework 4.7(KB3186497)を入れることができます。

参考サイト