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 と競合するレアケースなどが引き金になります。
まず結論:最短で通す推奨順序
現場での成功率・作業時間・リスクのバランスから、次の順番で実行するのが最も効率的です。
- セーフモード(ネットワークあり)で NetFx3 を追加(UsoSvc や常駐の影響を排除)。
- クリーンな Windows 10 ISO の
\sources\sxsを直接指定してオフラインで追加。 - UsoSvc を一時的に停止して通常起動のまま再試行(再起動を回避したい場合)。
- グループポリシー(またはレジストリ)で「オプション機能の直接ダウンロード」を許可。
- BITS / Windows Update サービスの稼働を確認し、必要に応じてリセット。
- システム予約(ESP)パーティションの空き容量を確保(目安 500MB 以上)。
- DISM / SFC でコンポーネントストアを整合し、ログから原因を特定。
- .NET 4.x を一時アンインストール → 3.5 追加 → 4.x 再導入(最終手段)。
対象環境と前提
| 項目 | 内容 |
|---|---|
| OS | Windows 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 に合わせてください。
- Microsoft 公式の Windows 10 ISO を入手しダブルクリックでマウント(例:
F:)。 - 管理者のコマンドプロンプト/PowerShell で次を実行。
Dism /Online /Enable-Feature /FeatureName:NetFX3 /All /Source:F:\sources\sxs /LimitAccess
重要:手元にコピーした SXS を指定すると破損・欠落で失敗することがあります。ISO ドライブ直指定が鉄則です。
.NET 4.x を一時的にアンインストールしてから追加
まれに .NET 4.x 系のランタイム/累積更新が競合し、NetFx3 の有効化が進まない事例があります。次の順で回避できます。
- 「アプリと機能」→「プログラムと機能」→「インストールされた更新プログラム」を開き、Microsoft .NET 4.x 関連の更新がアンインストール可能なら一時的に削除。
- NetFx3(3.5)を追加。
- .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.logC:\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 /LimitAccess | ISO の 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 NetFx3 | PowerShell。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 の結果 | エラーなし(復旧後に再試行) |
| ESP | EFI システムパーティション容量 | 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」の順で攻めると、ほぼ必ず抜けられます。

コメント