Windows 10で.NET Framework 3.5がエラー0x800f0922でインストールできない時の完全解決ガイド|DISM・ISO・セーフモード対応

Windows 10 で .NET Framework 3.5 を追加しようとして「0x800f0922」で失敗する──オンライン・オフライン、DISM どれも通らない。現場で再現性の高かった回避策と原因切り分けを、手順とチェックリストで体系化して解説します。最短で通す方法から、根本原因の特定まで一気通貫でカバーします。

目次

.NET Framework 3.5 インストール時のエラー「0x800f0922」の正体

0x800f0922 は、Windows の「機能の有効化」や DISM による機能追加時に返る代表的な失敗コードです。大きく以下のどちらかで発生します。

  • Windows Update との通信・ポリシーの問題:WSUS 管理下や、BITS/Windows Update サービス停止、UsoSvc(更新オーケストレーター)介入などで要求が成立しない。
  • システム予約(EFI/ESP)パーティション容量不足:ブート領域が小さすぎてブートローダー更新やコンポーネント配置に失敗する。

他にも、SXS ソースの破損や ISO バージョン不一致、OS イメージ破損(コンポーネントストア不整合)、既存の .NET 4.x と競合するレアケースなどが引き金になります。

まず結論:最短で通す推奨順序

現場での成功率・作業時間・リスクのバランスから、次の順番で実行するのが最も効率的です。

  1. セーフモード(ネットワークあり)で NetFx3 を追加(UsoSvc や常駐の影響を排除)。
  2. クリーンな Windows 10 ISO の \sources\sxs を直接指定してオフラインで追加。
  3. UsoSvc を一時的に停止して通常起動のまま再試行(再起動を回避したい場合)。
  4. グループポリシー(またはレジストリ)で「オプション機能の直接ダウンロード」を許可。
  5. BITS / Windows Update サービスの稼働を確認し、必要に応じてリセット。
  6. システム予約(ESP)パーティションの空き容量を確保(目安 500MB 以上)。
  7. DISM / SFC でコンポーネントストアを整合し、ログから原因を特定。
  8. .NET 4.x を一時アンインストール → 3.5 追加 → 4.x 再導入(最終手段)。

対象環境と前提

項目内容
OSWindows 10(バージョン 1909 を想定、他のビルドでも有効)
権限ローカル管理者権限
ネットワークオンライン/オフラインどちらでも実施可能(手順により異なる)
注意企業環境(WSUS/プロキシ)ではポリシーの影響に留意

手順詳細:確実に通すための実装ガイド

セーフモード(ネットワークあり)でのインストール

常駐サービスやセキュリティソフト、UsoSvc の干渉を受けにくく、成功率が高い方法です。

  • 起動方法(例):「設定」→「更新とセキュリティ」→「回復」→「今すぐ再起動」→「トラブルシューティング」→「詳細オプション」→「スタートアップ設定」→「再起動」→ 5(ネットワークを有効にしたセーフモード)。
  • msconfig でも可:「システム構成」→「ブート」→「セーフブート(ネットワーク)」→再起動。

セーフモードで管理者のコマンドプロンプト(または PowerShell)を開き、次を実行します。

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All

成功したら通常起動に戻します。セーフモードで成功したが通常起動では失敗する場合、次の UsoSvc 一時停止で再現性を上げられます。

再起動を避けたい場合:UsoSvc(更新オーケストレーター)を一時停止

通常起動のままインストールを通したいときに有効です。作業中のみ無効化し、完了後は必ず元に戻します。

sc stop usosvc
sc config usosvc start= disabled
REM ここで NetFx3 の有効化を実行
DISM /Online /Enable-Feature /FeatureName:NetFx3 /All
REM 終了後に元へ戻す
sc config usosvc start= demand

上記の start= の後に半角スペースが必要です。戻し忘れ防止のため、スクリプト化しておくと安全です。

クリーン ISO を使ったオフライン インストール

SXS フォルダーの劣化コピーやバージョン不一致が失敗原因になりやすいので、必ず ISO を直接マウントして指定します。OS のエディション/アーキテクチャ(x64/x86)は稼働中の OS に合わせてください。

  1. Microsoft 公式の Windows 10 ISO を入手しダブルクリックでマウント(例:F:)。
  2. 管理者のコマンドプロンプト/PowerShell で次を実行。
Dism /Online /Enable-Feature /FeatureName:NetFX3 /All /Source:F:\sources\sxs /LimitAccess

重要:手元にコピーした SXS を指定すると破損・欠落で失敗することがあります。ISO ドライブ直指定が鉄則です。

.NET 4.x を一時的にアンインストールしてから追加

まれに .NET 4.x 系のランタイム/累積更新が競合し、NetFx3 の有効化が進まない事例があります。次の順で回避できます。

  1. 「アプリと機能」→「プログラムと機能」→「インストールされた更新プログラム」を開き、Microsoft .NET 4.x 関連の更新がアンインストール可能なら一時的に削除。
  2. NetFx3(3.5)を追加。
  3. .NET 4.x を再インストール(または Windows Update で最新に更新)。

一部ビルドでは .NET 4.8 が OS コンポーネントとして固定されており、削除不可です。その場合はこのステップはスキップしてください。

グループポリシーで「オプション機能のインストール設定」を有効化

WSUS 管理下/プロキシ環境では、機能のソース取得がブロックされることがあります。次のポリシーで改善します。

  • gpedit.msc → コンピューターの構成 → 管理用テンプレート → システム → 「オプション機能のインストールとコンポーネント修復の設定を指定する」 を 有効。
  • 「Windows Update から直接ダウンロード」を 許可 に設定。

Windows 10 Home などローカルポリシーが使えない環境や、レジストリで直接調整する場合は次で一時的に WSUS を回避できます(企業ポリシーに従って実施)。

reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU ^
 /v UseWUServer /t REG_DWORD /d 0 /f
net stop wuauserv
net start wuauserv

作業完了後は UseWUServer を元の値に戻し(多くは 1)、gpupdate /force を実行してポリシーを復元します。

BITS と Windows Update サービスの状態確認

ダウンロードや機能の有効化には BITS と Windows Update(wuauserv)が健全に動作している必要があります。停止していると 0x800f0922 を誘発します。

sc query bits
sc query wuauserv
sc config bits start= auto
sc config wuauserv start= auto
net start bits
net start wuauserv

それでもダメな場合は、Windows Update コンポーネントをリセットします。

net stop wuauserv
net stop bits
net stop cryptsvc
net stop msiserver
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old
ren %systemroot%\System32\catroot2 catroot2.old
net start msiserver
net start cryptsvc
net start bits
net start wuauserv

システム予約(ESP)パーティションの空き容量を確保

0x800f0922 は ESP が小さすぎる場合にも発生します。特に旧来の 100MB 程度の ESP では失敗しやすく、500MB 以上が安全目安です。

  • 「ディスクの管理(diskmgmt.msc)」で EFI システムパーティション(通常、数百 MB・FAT32・ドライブレター無し)を確認。
  • 容量が不足している場合、バックアップを取得し、C: の前方に空きを作って ESP を拡張(多くはサードパーティーツールが必要)。
  • BitLocker を有効にしていると操作に制約が出るため、事前の保護解除・回復キー管理が必須。

パーティション操作はリスクが高いため、可能であれば専門の保守ウィンドウで実施し、電源断対策も行ってください。

DISM/CBS ログを確認して原因を深掘り

原因が特定できない時はログが頼りです。次をメモ帳やログビューアで開き、該当時刻帯のエラーを検索します。

  • C:\Windows\Logs\DISM\dism.log
  • C:\Windows\Logs\CBS\cbs.log

代表的なキーワード:

  • 0x800f0922:WU 連携失敗/ESP 不足。
  • 0x800f081f:ソースファイルが見つからない(SxS 指定・ISO 不一致を疑う)。
  • CBS_E_SOURCE_MISSING:コンポーネントストアの欠損。

イメージ破損が疑わしい場合は、次でストアを修復してから再試行します。

DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow

コマンド早見表(コピー&ペースト用)

目的コマンドポイント
NetFx3 を有効化(オンライン)DISM /Online /Enable-Feature /FeatureName:NetFx3 /All標準経路。通信要件に依存。
NetFx3 を有効化(ISO 指定)Dism /Online /Enable-Feature /FeatureName:NetFX3 /All /Source:F:\sources\sxs /LimitAccessISO の SXS を直接指定。
UsoSvc 一時停止sc stop usosvc && sc config usosvc start= disabled作業後は start= demand に戻す。
WU サービス確認sc query wuauserv状態が「実行中」であること。
コンポーネントストア修復DISM /Online /Cleanup-Image /RestoreHealth破損時の定番。
機能状態の確認Get-WindowsOptionalFeature -Online -FeatureName NetFx3PowerShell。State : Enabled を期待。

企業・WSUS 管理下での実運用ノウハウ

  • ポリシー優先:一時的に「Windows Update から直接ダウンロード」を許可し、作業終了後は元に戻す運用を文書化。
  • 保守ウィンドウ:ESP 拡張・WU リセットなどの破壊的変更は計画停止で実施。
  • 監査ログ:実行したコマンド・時刻・担当者をチケットに記録。再発時の再現性が上がる。
  • ISO 管理:ビルドに整合する ISO を保管(例:1909=18363、22H2=19045)し、SXS はコピーせず ISO 直指定を標準化。

よくある失敗パターンと回避策

  • SXS フォルダーだけをコピーして使う:欠損・破損で 0x800f081f。ISO をマウントしてそのドライブを指定。
  • WU サービスを「手動」のまま:実行時に止まっていると 0x800f0922。作業中は「自動」で明示起動。
  • WSUS を回避せずに実行:管理ポリシーで弾かれ失敗。ポリシーで直接ダウンロードを一時許可。
  • ESP 容量不足を見落とす:セキュリティ製品や古い環境で特に起きやすい。500MB 以上を目安に拡張。
  • UsoSvc の介入:インストール直前に一時停止するか、セーフモードで実行。

実施のチェックリスト(現場用)

チェック観点OK の目安
通信・ポリシーWSUS/プロキシの影響、直接ダウンロード許可一時的に直接 WU を許可済み
サービスBITS / wuauserv 稼働、UsoSvc 介入の有無両サービス実行中、必要なら UsoSvc 停止
ソースISO の \sources\sxs を直指定コピーではなく ISO ドライブを指定
ストア健全性DISM / SFC の結果エラーなし(復旧後に再試行)
ESPEFI システムパーティション容量500MB 以上(少なくとも 250MB 以上)

インストール後の確認と後片付け

  • 機能状態を確認: Get-WindowsOptionalFeature -Online -FeatureName NetFx3
  • GUI でも確認:「Windows の機能の有効化または無効化」で「.NET Framework 3.5(.NET 2.0 および 3.0 を含む)」にチェックが入っていること。
  • UsoSvc を停止していた場合は 必ず元の設定へ戻す: sc config usosvc start= demand
  • WSUS 回避のレジストリを変更した場合は 原状復帰、gpupdate /force を実行。
  • Windows Update コンポーネントをリセットした場合は、翌営業日に累積更新の検出・適用を確認。

トラブルシューティングの深掘り:症状別の対処

ケースA:オンラインでもオフラインでも 0x800f0922

UsoSvc 介入・ESP 不足のどちらかである可能性が高いです。セーフモードでの実行、UsoSvc 停止の上で ISO 指定を試し、改善なければ ESP 容量を確認します。

ケースB:0x800f081f(ソースが見つからない)へ変化

ISO 指定が誤っているか、ISO バージョン不一致の可能性。稼働中 OS のビルドに整合する ISO を使い、\sources\sxs を直指定してください。

ケースC:ログに CBS_E_SOURCE_MISSING

コンポーネントストアの破損です。DISM /RestoreHealth と sfc /scannow を完走させ、再試行します。

ケースD:企業ネットワーク下でタイムアウト

プロキシ・ファイアウォール・WSUS のいずれかでブロック。ポリシーで「直接ダウンロード」を有効化し、必要に応じてプロキシバイパスを設定します。

安全運用のための補足(ベストプラクティス)

  • 復元ポイント/バックアップ:重要端末では作業前に作成。
  • スクリプト化:開始時に状態取得、終了時に原状復帰までを 1 本のバッチに。
  • 記録:実行ログ(コンソール出力)を > install_netfx3.log などに保存。
  • ロールバック手順:うまくいかない場合は DISM /Disable-Feature /FeatureName:NetFx3 で元に戻せるように。

サンプル:ワンショットでやり切るバッチ(管理者で実行)

作業中の一時設定・原状復帰を含めたサンプルです。必要に応じて ISO ドライブ文字を変更してください。

@echo off
setlocal
set SRC=F:\sources\sxs

echo [1] UsoSvc を一時停止...
sc stop usosvc
sc config usosvc start= disabled

echo [2] WU/BITS を起動...
sc config bits start= auto
sc config wuauserv start= auto
net start bits
net start wuauserv

echo [3] NetFx3 を ISO から有効化...
Dism /Online /Enable-Feature /FeatureName:NetFX3 /All /Source:%SRC% /LimitAccess
if errorlevel 1 (
echo 失敗。DISM /RestoreHealth を試行します...
DISM /Online /Cleanup-Image /RestoreHealth
echo 再試行...
Dism /Online /Enable-Feature /FeatureName:NetFX3 /All /Source:%SRC% /LimitAccess
)

echo [4] 原状復帰...
sc config usosvc start= demand

echo [5] 状態確認...
powershell -Command "Get-WindowsOptionalFeature -Online -FeatureName NetFx3"

echo 完了。必要に応じて再起動してください。
endlocal 

FAQ

Q:GUI で「Windows の機能」から追加しても同じですか?

A:はい。内部的には同じ機能有効化を行います。DISM のほうがエラー内容を把握しやすく、ログ解析もしやすい点で有利です。

Q:ISO は最新でないとダメ?

A:稼働中 OS と同系統(エディション・アーキテクチャ)であれば問題ありませんが、ビルドの整合をとると失敗しにくいです。

Q:.NET 4.x を外すのは危険?

A:通常は不要です。どうしても通らないときの最終手段で、外した後は必ず元に戻してください。OS 組み込みの 4.8 がアンインストール不可な場合は無理に触らないでください。

Q:再起動は必要?

A:多くの場合は不要ですが、ポリシー変更やパーティション操作を行った場合は再起動が必要になります。保守時間内の計画実施を推奨します。

まとめ:最も再現性の高い回避策

エラー 0x800f0922 は、セーフモード(ネットワークあり)+ ISO の SXS 直指定で通るケースが多数です。通常起動のまま処理したい場合は、UsoSvc の一時停止を併用し、BITS / WU サービスの稼働とポリシー設定を整えましょう。繰り返し失敗する場合は、ESP 容量の確保とDISM/CBS ログの読み解きでボトルネックを特定してください。これらの実施により、Home/Pro/Enterprise を問わず、Windows 10 1909 から 22H2 まで幅広い環境で安定して .NET Framework 3.5 を導入できます。

参考:作業後のヘルスチェック・スクリプト(PowerShell)

# 管理者で実行
Write-Host "NetFx3 状態:" -ForegroundColor Cyan
(Get-WindowsOptionalFeature -Online -FeatureName NetFx3).State

Write-Host "サービス状態:" -ForegroundColor Cyan
Get-Service BITS,wuauserv | Select-Object Name, Status, StartType | Format-Table -AutoSize

Write-Host "DISM / SFC 実行(必要時)..." -ForegroundColor Cyan

# Start-Process -FilePath DISM -ArgumentList "/Online","/Cleanup-Image","/RestoreHealth" -Wait -Verb RunAs

# sfc /scannow

リスクと注意事項

  • レジストリ変更・パーティション操作は誤ると起動不能の恐れ。必ずバックアップを取得し、変更点を記録してください。
  • 企業環境ではネットワーク・ポリシーの逸脱を避けるため、承認プロセスに沿って一時的な例外設定を行ってください。
  • セキュリティ製品による自己防衛機能が DISM を阻害する場合があります。保守的に一時停止し、完了後ただちに復帰させてください。

最短ナビ:失敗が続く場合は「セーフモード(ネットワーク)→ ISO の SXS 直指定 → UsoSvc 一時停止 → ポリシー許可 → BITS/WU リセット → ESP 確認 → DISM/SFC」の順で攻めると、ほぼ必ず抜けられます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次