ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

.NET Framework 3.5 を有効化していないのに .NET 3.5 の更新プログラムを無理矢理適応してはいけない
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

.NET Framework 3.5 を有効化していないのに .NET 3.5 の更新プログラムを無理矢理適応してはいけない

2017-03-11 11:33

    なぜならば .NET Framework 3.5 を有効化(インストール)するのが困難になるからだ。
    そのときの状況を仮想 PC を使用して再現してみました。

    今現在私が使っているメイン PC は Windows 8.1 Update で、1度OSを上書き再インストールしています。
    そのとき使用した Windows 8.1 Update のイメージは、Microsoft から Windows 8.1 用のセットアップメディア作成ツールをダウンロードして ISO ファイルを作成した物に、いくつかの更新プログラムをあらかじめ適応し、仮想 PC にインストールして監査モードに入り、全部の全部の更新プログラムを適応して「DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase」で容量を削減してから一般化したものです。

    ちなみに Windows 8.1 の監査モードは何かと癖があって Sysprep の実行に失敗するケースがあったり、Windows Update の更新プログラムの確認が永遠に終わらないバグがあったりします。
    Windows Update については、標準のクライアントがバグっているだけなので PowerShell を使った Windows Update 実行スクリプトや Windows Update MiniTool といったサードパーティー製クライアントを使用すれば更新の検索が可能です。

    閑話休題

    上書きインストールしに使用するイメージにあらかじめ .NET Framework 4.6.2 を適応していると、Windows Update に「December, 2016 Security and Quality Rollup for .NET Framework 3.5, 4.5.2, 4.6, 4.6.1, 4.6.2 on Windows 8.1 (KB3205404)」が現れます。
    日本語表記は「2016 年 12 月 x64 用 Windows 8.1 および Windows Server 2012 R2 の、.NET Framework 3.5、4.5.2、4.6、4.6.1、4.6.2 用セキュリティおよび品質ロールアップ (KB3205404)」です。
    これを普通に Windows Update で適応する場合は何の問題もありませんが……。

    KB3205404 はいくつかの更新プログラムからなる更新プログラム群です。

    そのうちの KB3205378 は .NET 4.6.2 用、KB3210132 は .NET 3.5 用の更新プログラムです。

    .NET 3.5 は無効化されており、.NET 4.6.2 はインストールされている状態で Windows Update で KB3205404 をインストールすれば普通は KB3205378 だけがインストールされるはずです。



    Microsoft Update カタログ から KB3205404 を検索して KB3210132 だけをダウンロードしてきてインストールしようとしても、.NET3.5 が有効でなければはじかれてしまいます。

    しかし、これを DISM /Online /Add-Package を使用して無理矢理適応してしまうことができます。

    (ノ∀`)アチャー
    こうなると、.NET 3.5 が有効化できなくなります。

    .NET 3.5 を一度も有効化していなくてインストールが必要な状態(「DISM /Online /Get-Features」で確認したとき、NetFx3 の状態が「無効」では無く「ペイロードの削除によって無効」と表示されている状態)で、.NET 3.5 の更新プログラムを無理矢理適応すると、.NET 3.5 のインストールに失敗してしまうようになります。

    KB3210132 をアンインストールしたくても「DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase」を実行してしまって KB3210132 が恒久的になり、もはや絶望的な状況です。
    こんなレアなケースを解決する方法なんてどこにもなくて、ほぼあきらめかけていたときに、駄目元である方法を思いつきました。

    Windows Update に接続できない状況で、.NET 3.5 を有効化させる方法として Windows 8.1 のセットアップメディアを用意し(ここではディスクメディアと仮定して 光学ドライブが D: ドライブ とする)、「DISM /Online /Enable-Feature /FeatureName:NetFx3 /LimitAccess /Source:D:\sources\sxs」を実行するという方法があります。
    もちろんこの方法でもインストールに失敗してしまうのですが、D:\sources\sxsを適当な場所にコピーし、さらに KB3210132 を展開し、できあがったものを sxs に放り込んだあと、そこをインストールのソースとして参照させるとどうなるだろうか。

    例としてインストールメディア内の sxs フォルダを C:\tmp にコピーしたとします。
    KB3210132 の MSU ファイル もそこに配置しておきます。


    MSU ファイルから expand コマンドを使用して CAB ファイルを抽出します。


    CAB ファイルを展開するためのフォルダを作成してそこへ CAB ファイルの中身を全部展開させます。

    CAB ファイルの中身をを全部展開すると、たくさんのファイルとフォルダーができあがりますが、ここで必要なのはフォルダーだけです。


    展開してできあがったすべてのフォルダーを sxs フォルダへ移動させます。

    さて、これで「DISM /Online /Enable-Feature /FeatureName:NetFx3 /LimitAccess /Source:C:\tmp\sxs」を実行してみるとどうなるだろうか……。

    イャッッホォォォオオォオウ!

    .NET Framework 3.5 を有効化させることに成功しました。

    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。