Windows で .NET Runtime を 6.0.36 へ更新しようとして、先に古い .NET をアンインストールしようとしたら「該当プログラムが見つからない」などのエラーで削除できず、更新作業が止まってしまうことがあります。結論から言うと、多くのケースでは“削除にこだわらず更新を先に進める”のが最短です。状況別に、確実に前へ進む手順を整理します。
.NET Runtime の更新で「アンインストールできない」が起きる典型パターン
このトラブルは、Windows の「アプリと機能」「プログラムと機能」に .NET が残っているのに、アンインストール時に次のようなメッセージが出て失敗するケースでよく起きます。
| 症状(例) | ありがちな原因 | まず試すべき方針 |
|---|---|---|
| 「該当プログラムが見つからない」「必要なインストール パッケージが見つかりません」 | Windows Installer のキャッシュ(MSI)が欠けている/アンインストール情報が壊れている | 更新は先に進める(新しい Runtime を入れる)→ その後に修復・削除を試す |
| 一覧には出るが、削除ボタンで即エラー | 途中で削除に失敗した残骸が残っている/レジストリの不整合 | .NET Uninstall Tool か Repair で整合性を戻す |
| 複数の「Microsoft .NET Runtime」「Desktop Runtime」が混在 | x86/x64 の両方が入っている、または Runtime 種別が複数 | 必要なものだけ残す方針を先に決め、確認コマンドで棚卸しする |
重要: “アンインストールが失敗する=更新できない”ではありません。更新は更新、削除は削除で分けて考えると詰まりにくくなります。
結論:.NET は基本的に共存できるので、先にアンインストール必須ではない
.NET はメジャーバージョン(6/7/8 など)で共存できる設計です。さらに同一メジャー(例:6.0系)の場合、通常は最新パッチが利用される方向に動作します。つまり、古い 6.0.x が消せない状態でも、6.0.36 のインストール自体は進められるケースが多いです。
- 「旧版を削除してから入れないといけない」という思い込みをまず外す
- 更新できれば、アプリ側は新しいパッチを参照できる可能性が高い
- “一覧が汚い”問題は、更新完了後に落ち着いて解消する
最短で更新する手順(.NET 6.0.36 へ)
ここでは「まず動く状態に戻す」ことに集中します。アンインストールに時間を溶かす前に、更新を完了させましょう。
手順1:入っている .NET を棚卸しする
PowerShell(またはコマンドプロンプト)で、インストール済みのランタイムを確認します。
dotnet --info
dotnet --list-runtimes
dotnet --list-sdks
| コマンド | 分かること | 見るポイント |
|---|---|---|
| dotnet –list-runtimes | Runtime(実行環境)の一覧 | Microsoft.NETCore.App / Microsoft.WindowsDesktop.App のバージョン、インストール先 |
| dotnet –list-sdks | SDK(開発用)の一覧 | 開発機で SDK が必要かどうかの判断材料 |
| dotnet –info | 環境情報(OS/アーキテクチャなど) | x64/x86 の確認、PATH 競合の匂い |
補足: 「dotnet コマンドがない」場合は、Runtime だけが入っているか、PATH が通っていないことがあります。その場合でも更新は可能ですが、確認は「アプリと機能」の一覧と合わせて行うと確実です。
手順2:自分に必要な “Runtime の種類” を間違えない
.NET のインストーラーは似た名前が多く、ここを取り違えると「入れたのに直らない」になりがちです。
| 種類 | 主な用途 | 必要になりやすい例 | 見分けのヒント |
|---|---|---|---|
| .NET Runtime | コンソール/バックエンドなどの実行 | バッチ処理ツール、Windows サービス、CLI | WinForms/WPF が不要ならまずこれ |
| Windows Desktop Runtime | WinForms / WPF アプリの実行 | 社内ツール、業務アプリ(デスクトップ) | 「Desktop」が付いている |
| ASP.NET Core Runtime | ASP.NET Core の実行 | Kestrel で動くWebアプリ、API | サーバー用途でよく必要 |
| Hosting Bundle(IIS) | IIS で ASP.NET Core をホスト | Windows Server + IIS の Web サイト | 「Hosting Bundle」 |
手順3:.NET 6.0.36 を “上書きのつもりで” インストールする
- 対象マシンが x64 か x86 かを確認(多くは x64)
- 必要な Runtime(Runtime / Desktop Runtime / ASP.NET Core Runtime)を選んでインストール
- インストール後、必要なら再起動
- 再度
dotnet --list-runtimesでバージョンが入ったか確認
ポイント: 「古い 6.0.16 が消せない」状態でも、6.0.36 の導入自体は進むことが多いです。更新を先に完了させて、運用上のリスク(脆弱性・互換性)を先に潰すほうが安全です。
それでもアンインストールが必要なときの判断基準
更新ができたら、次に「消せない古いエントリ」をどう扱うかを決めます。実務では “消さない選択” が正解になることもあります。
| 目的 | アンインストールの必要性 | おすすめ方針 |
|---|---|---|
| とにかくアプリを動かしたい | 低い | 新しい Runtime を入れて動作確認 → 後回し |
| 社内の資産管理で “不要ソフト” 扱いになる | 高い | Uninstall Tool / Repair で正規に削除できる状態へ |
| ディスク容量を少しでも空けたい | 中 | 本当に必要な x86/x64 と Runtime 種別だけ残す |
| インストーラーが壊れて更新のたびに詰まる | 高い | Repair → アンインストール → クリーン再導入 |
対処法1:.NET Uninstall Tool で削除する(正攻法)
Windows の通常アンインストールが壊れている場合、Microsoft が提供している .NET 専用のアンインストールツール(通称 .NET Uninstall Tool / .NET Core Uninstall Tool)を使うのが最も手堅い方法です。
向いているケース
- 「該当プログラムが見つからない」などで GUI から消せない
- .NET のエントリが複数あり、何を消すべきか整理したい
- SDK / Runtime / Desktop Runtime をまとめて整理したい
進め方(基本の流れ)
ツールは「一覧表示 → 対象を指定して削除」が基本です。コマンドの細かいオプションは環境で変わるため、まず list を取ってから決めるのが安全です。
(例)インストール済みの .NET を一覧表示
dotnet-core-uninstall list
(例)ヘルプで削除オプションを確認
dotnet-core-uninstall remove --help
| やること | 狙い | 注意点 |
|---|---|---|
| list で現状を把握 | “何が入っているか”を見える化 | x86/x64、Runtime 種別を見落とさない |
| 消す対象を決める | 必要な Runtime を残す | 業務アプリが依存している可能性があるものは慎重に |
| remove で削除 | 壊れた GUI アンインストールを回避 | 削除後は再起動・動作確認をセットで行う |
実務メモ: 端末が開発用途でない場合、SDK まで消してしまうと別の作業(ビルド、ツール実行)に影響します。基本は “Runtime だけ整理” から入ると安全です。
対処法2:同じバージョンのインストーラーで Repair(修復)してからアンインストール
「アンインストーラー情報が壊れている/欠けている」タイプには、同じバージョン(例:6.0.16 x64)を入手して Repair(修復)してから削除する方法が効くことがあります。Repair によって、アンインストールに必要な情報やコンポーネントが補完され、通常の削除が通るようになるイメージです。
手順
- 「消せない」と表示されている .NET の バージョンと種類(Runtime / Desktop Runtime など)を確認する
- 同じバージョン・同じ種類・同じアーキテクチャ(x64/x86)のインストーラーを用意する
- インストーラーを起動し、表示される場合は Repair(修復) を実行する
- 修復完了後、もう一度「アプリと機能」からアンインストールを試す
- ダメなら Uninstall Tool に切り替える
| Repair が効きやすい状況 | 効きにくい状況 |
|---|---|
| MSI の参照が欠けている/更新途中で中断した | OS 側の Windows Installer が壊れている |
| インストールは一応完了扱いになっている | 権限・セキュリティソフトが強くブロックしている |
| 同じバージョンのインストーラーが入手できる | どのバージョンが入っていたか不明 |
対処法3:Microsoft の「プログラムのインストールとアンインストール」トラブルシューティングを使う
Windows の「アンインストール情報が壊れている」系トラブルに対して、Microsoft のトラブルシューティングツールが役に立つ場合があります。うまくいけば、“削除できないエントリ” を一覧から消す(=壊れた登録情報を整理する)ことができます。
- GUI のアンインストールが「見つからない」「パッケージが無い」と言って失敗する
- Uninstall Tool を使う前に、まず Windows 側の整合性を戻したい
注意: これは “実体の削除” というより “壊れた登録情報の修復” に近い動きになることがあります。運用上「一覧に残らないこと」が目的なら有効です。
最後の手段:msiexec で強制アンインストール(上級者向け)
どうしても消せない場合、Windows Installer の製品コード(GUID)を特定して msiexec で削除を試す手があります。ただし誤った GUID を指定すると別製品を消してしまうリスクがあるため、業務端末では手順書化・承認フローの上で実施するのが安全です。
製品コードを探すときの例(PowerShell)
環境によりキーが異なるため、検索して絞り込む形が安全です。
(例)アンインストール情報から ".NET" を含む表示名を検索する(イメージ)
Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" |
Get-ItemProperty |
Where-Object { $_.DisplayName -match "\.NET" } |
Select-Object DisplayName, DisplayVersion, PSChildName
見つかった GUID(PSChildName など)を使って、次のようにアンインストールを試します。
msiexec /x {GUID}
注意: 会社PC・サーバーでは、変更管理(復元ポイント、バックアップ、メンテ時間確保)を前提にしてください。自信がなければ Uninstall Tool または Repair に寄せるのが安全です。
更新・整理が終わったらやるべき確認
dotnet --list-runtimesで目的の 6.0.36 が入っていることを確認- 対象アプリ(WinForms/WPF/ASP.NET Core など)を実際に起動して動作確認
- イベントビューアーに .NET Runtime 関連のエラーが出ていないかチェック
- 必要に応じて再起動(サービスや IIS を使う場合は特に)
運用の補足:.NET 6 を使い続けるべきか(セキュリティ視点)
.NET 6 は LTS でしたが、すでにサポート終了扱いです。今後のセキュリティ更新の観点では、可能なら サポート中の .NET(例:.NET 8 LTS) への移行を検討する価値があります。
| 選択肢 | 向いているケース | 現場での考え方 |
|---|---|---|
| .NET 6 を延命(最小変更) | 今すぐ移行できない、依存関係が重い | 短期のつなぎ。更新作業のたびに負債になりやすい |
| .NET 8 LTS へ移行 | 業務システム、長期運用、監査がある | “安定 + セキュリティ” で最有力。計画的に移行すると後が楽 |
| 最新系(STS)へ | 新機能検証、短いサイクルで追従できる | アップデート前提の運用が必要。体制が整っているなら有効 |
現実的な落としどころ: まずは “今のアプリが動く最新パッチを入れる” → その後に “次のLTSへ移行計画” の順番が、トラブルと工数を最小化しやすいです。
よくある質問
Runtime と SDK の違いは?
Runtime は「実行に必要な部品」、SDK は「開発・ビルドに必要な部品」です。アプリを動かすだけなら基本は Runtime で足ります。開発PCや CI では SDK が必要です。
x86 と x64 は両方必要?
64bit OS でも、32bit アプリが .NET に依存しているなら x86 の Runtime が必要です。業務アプリが古い場合は x86 が残っていることがあるので、いきなり全削除せず、実際に使っているアプリを基準に判断してください。
古い .NET が「削除できないまま」残っていても動作に問題はある?
多くのケースでは、更新後の実行には直ちに支障は出ません。ただし、管理上の棚卸し・監査・パッチ管理の観点で問題になることがあります。運用要件がある場合は、Uninstall Tool か Repair で整理しておくのがおすすめです。
更新したのにアプリが起動しない
必要な Runtime の種類が違う(Desktop Runtime が必要なのに Runtime だけ入れた等)ケースが多いです。まずはアプリの種別(WinForms/WPF、Web、コンソール)を切り分け、表の「Runtime の種類」を見直してください。
「先にアンインストールしろ」と言われたが?
手順書が古い、または特定の環境(IIS の Hosting Bundle を入れ替える等)に限定した注意書きの可能性があります。まずは更新を先に完了させ、必要性が確認できた段階で削除に取り掛かるほうが安全で早いです。

コメント