Windows
.NET
error
0

Windows 7以降で.NET Framework 4.7とD3DCompiler_47.dllが入らない問題

はじめに

.NET Framework 4.7を入れようとしたら、d3dcompiler_47.dllが見つからずにエラーになるという現象が発生した
何とか解決しようとオフィシャルの情報をもとにやってみたけれどダメだったので試行錯誤してみた覚書です

何が起きたのか

  • [インストールブロック]

.NET Framework 4.7のオフラインインストーラ( NDP47-KB3186497-x86-x64-AllOS-ENU.exe )を以下から落としてきてインストールを実施します。

https://support.microsoft.com/ja-jp/help/3186497/the-net-framework-4-7-offline-installer-for-windows

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

image.png

これに対応するには、以下のサポートURLに載っている通り、パッチ( Windows6.1-KB4019990-x64.msu )をあてればいいのですが、これが当たらない。

https://support.microsoft.com/ja-jp/help/3186497/the-net-framework-4-7-offline-installer-for-windows

検索しているというメッセージが出たまま、いつまで待っても、何も起きません。

image.png

なんでだろうと思って、プロセスを確認したところ、Windows Update が管理ポリシーで停止させられているためと判明。
しかし、開発ツールをインストールするにはD3DCompiler_47.dllが必要なので、何とかDLLだけでも追加したい。

どうやって入れようかと考えたところ、確かパッケージングツールを使えばmsuをインストールできたことを思い出したので、今度はMSUを分解して必要なDLLだけインストールすることにしてみました。

  • MSUの分解

ダウンロードした、パッチ(kb4019990)が以下においてあるとして

D:\work\Windows6.1-KB4019990-x64.msu

以下のコマンドをたたきます。

expand /f:* D:\work\Windows6.1-KB4019990-x64.msu D:\work
pkgmgr.exe /n:D:\work\Windows6.1-KB4019990-x64.xml

コマンドプロンプトで実行すると、以下のようになると思います。

D:\work>expand /f:* D:\work\Windows6.1-KB4019990-x64.msu D:\work
Microsoft (R) File Expansion Utility  Version 6.1.7600.16385
Copyright (c) Microsoft Corporation. All rights reserved.

D:\work\WSUSSCAN.cab を展開キューに追加しています
D:\work\Windows6.1-KB4019990-x64.cab を展開キューに追加しています
D:\work\Windows6.1-KB4019990-x64-pkgProperties.txt を展開キューに追加しています
D:\work\Windows6.1-KB4019990-x64.xml を展開キューに追加しています

ファイルを解凍しています...

ファイルの解凍が完了しました...
合計 4 ファイル

D:\work>pkgmgr.exe /n:D:\work\Windows6.1-KB4019990-x64.xml

D:\work>

インストールメッセージが何も出ないので不安になりますが、以下のコマンドで確認できます

D:\work>dir %systemdrive%\windows\system32\d3dcompiler_47.dll
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は F6B6-266A です

 C:\windows\system32 のディレクトリ

2018/07/13  14:45         4,296,704 D3DCompiler_47.dll
               1 個のファイル           4,296,704 バイト
               0 個のディレクトリ  226,298,380,288 バイトの空き領域

きちんと、入ったようです。

再度、.NET Framework 4.7のオフラインインストーラ( NDP47-KB3186497-x86-x64-AllOS-ENU.exe )を実行します。

image.png

今度はちゃんとインストーラが走って完了しました。

さいごに

Windows Update を停止させるために、管理ポリシーで Windows Update を停止させると、msu形式のインストーラが全部使えなくなってしまって、開発ツールがインストールできないなどの弊害が起きることが今回の現象でわかりました。
同じような現象にあたって、開発ツールがインストールできない方のために、覚書として残しておきます。

Why do not you register as a user and use Qiita more conveniently?
You seem to be reading articles frequently this month. You can use this function by logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away