はじめに
.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でのエラー画面です。
これに対応するには、以下のサポートURLに載っている通り、パッチ( Windows6.1-KB4019990-x64.msu
)をあてればいいのですが、これが当たらない。
https://support.microsoft.com/ja-jp/help/3186497/the-net-framework-4-7-offline-installer-for-windows
検索しているというメッセージが出たまま、いつまで待っても、何も起きません。
なんでだろうと思って、プロセスを確認したところ、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
)を実行します。
今度はちゃんとインストーラが走って完了しました。
さいごに
Windows Update を停止させるために、管理ポリシーで Windows Update を停止させると、msu形式のインストーラが全部使えなくなってしまって、開発ツールがインストールできないなどの弊害が起きることが今回の現象でわかりました。
同じような現象にあたって、開発ツールがインストールできない方のために、覚書として残しておきます。