Visual Studio 2022でMFCダイアログベース作成時のHRESULT E_FAIL(COMコンポーネント呼び出し失敗)でリソースエディター/ダイアログデザイナーが使えない問題の解決策

Visual Studio 2022 CommunityでMFCダイアログベースアプリを作成するとHRESULT E_FAILが出て、.rcやダイアログデザイナーが開けない。原因切り分けからログ取得、拡張機能・セキュリティ・パス問題の対処まで、最短で直す手順をまとめます。

目次

起きている症状を整理する(ビルドできるのにデザイナーだけ壊れる)

このトラブルは、見た目がやや特殊です。プロジェクト自体はフォルダーに生成され、開き直せばビルド・実行もできるのに、Visual Studio上で「統合」が途中で止まったような状態になります。その結果、リソース編集に必要な機能が動かず、.rcやダイアログデザイナーが使えません。

項目よくある状態判断ポイント
ウィザード完了時のエラー「error hresult-e fail has been returned from a call to a Com component」作成直後に出る(作成処理の最後で落ちている)
フォルダー/ファイルプロジェクト一式は存在する.sln/.vcxproj/.rcなどは作られている
ビルド/実行できることが多いMSBuild/コンパイラは動くが、IDE統合が壊れる
Resource(.rc)開けない/テキストでしか開けない/リソースビューが出ない「ダイアログデザイナー」が起動しない

原因の考え方:ウィザードの「作成後処理(post-creation)」でCOM連携が失敗している

MFCのアプリケーションウィザードは、ファイル生成だけでなく「作成後の後処理(IDEへの登録・設定)」も行います。ここでCOM関連の呼び出しが失敗すると、プロジェクト自体はできているのに、Visual Studioの統合処理が最後まで走らず、リソースデザイナー周りが正常に使えない状態になりがちです。Microsoft Q&Aでも、テンプレートが基本部分は作るが、COM関連のpost-creationで失敗し、原因特定は簡単ではないという趣旨の回答がされています。

このタイプの問題は、コードやMFC/ATLのバージョンというより、次のような「環境要因」で起きやすいのが特徴です。

  • 拡張機能(Extensions)がウィザードやデザイナーの処理に干渉している
  • セキュリティソフト(AV/EDR)やWindowsの保護機能が、生成直後のファイル操作やCOMアクティベーションをブロックしている
  • パス条件(長すぎる、特殊文字、ネットワーク/同期フォルダー、権限が絡む場所)が原因で後処理が失敗している
  • Visual Studio側のキャッシュ破損やインストール不整合(修復で直ることがある)

最短で直すための切り分け(効果が出やすい順)

ポイントは「原因を当てに行く」よりも、まず再現条件を崩して復旧させ、その後に原因を絞り込むことです。下の表の上から順に試すと、遠回りになりにくいです。

試すこと狙い具体的なやり方成功のサイン
作成場所を単純なパスへパス/権限/同期/リポジトリ配下の影響を排除C:\temp などに新規でMFCダイアログベースを作成作成完了時にE_FAILが出ない、.rcがデザイナーで開く
拡張機能を無効化テンプレート後処理やデザイナーを邪魔している拡張を排除Extensions > Manage Extensions でInstalledを一時無効/アンインストール新規作成で正常化、Resource Viewが復活
Visual Studioをセーフモード起動「拡張が原因かどうか」を高速判定devenv.exe /SafeMode で起動して新規作成を試すセーフモードでは成功する(=拡張要因が濃厚)
セキュリティソフトを一時停止生成直後のファイル生成/COM呼び出しブロックを排除AV/EDRを一時無効化して再作成(オフライン推奨)停止中だけ成功する(=例外設定が必要)
Visual StudioのRepair(修復)インストール不整合・破損をまとめて直すVisual Studio Installer から Repair通常起動でも再現しなくなる

特に「C:\tempなどに作ると成功する」場合、プロジェクトを作っている場所が原因の可能性が一気に高まります。リポジトリ直下、OneDrive/Dropboxなどの同期フォルダー、ネットワークドライブ、権限が強い場所(例:Program Files配下)などは、見えない制約が増えます。

セーフモード(/SafeMode)で切り分けする手順

Visual Studioのセーフモードは、起動時にサードパーティ製VSPackageの読み込みを抑止し、安定した状態で起動するためのスイッチです。拡張機能が原因かどうかを切り分けるのに向いています。

Developer Command Prompt for VS 2022(または通常のコマンドプロンプト)で次を実行します。

devenv.exe /SafeMode

セーフモードで新規に「MFC アプリケーション(ダイアログベース)」を作成し、エラーが消えるなら、まず拡張機能を疑って良い状況です。問題の拡張を特定するコツは「全部無効 → 半分ずつ戻す(分割統治)」です。

拡張機能を疑うときの現実的な進め方

  • まずはC++/MFCに関係しそうな拡張(コード解析、デザイナー補助、プロジェクトテンプレート系、AI補助系)を優先して無効化
  • その後、問題が消えたら「一つずつ戻す」より、影響の大きいものから戻して原因を絞る
  • Visual Studio更新直後や拡張更新直後から起きたなら、ほぼそのタイミングがヒント

セキュリティソフト(AV/EDR)を疑うときの注意点

Microsoft Q&Aでも、プロジェクト作成場所の変更や、セキュリティ管理ソフトを一時的に無効化して切り分ける提案がよく出ます。

  • 無効化は短時間・オフラインを基本にし、再現確認が終わったら必ず戻す
  • 原因だと判明したら「無効化し続ける」のではなく、devenv.exeや作業フォルダーを例外設定に入れる方向で調整する

「.rcにアクセスできない」を深掘り:デザイナーとビルドの役割が違う

ビルドが通るのにリソースデザイナーが壊れるのは、珍しくありません。理由はシンプルで、ビルド時は主にMSBuildやrc.exe(リソースコンパイラ)が動けば成立しますが、ダイアログデザイナーやResource ViewはIDE側(Visual StudioのパッケージやCOM)に強く依存するためです。ウィザードの後処理が途中で止まると、IDE統合だけが破綻して見えます。

補足:.rcを「プロジェクト外」で開くと別のエラーになることがある

.rcファイルをエクスプローラーから単体で開くなど、C++プロジェクトの文脈が無い状態だと、Windows SDKのインクルード設定が確立しておらず、RC1015など別のエラーになってテキストとして開いてしまうケースがあります。今回の現象とは別ですが、切り分け中に混乱しやすいポイントです。

プロジェクトが作れているのにIDEがおかしいときに効く「キャッシュ系」対処

ウィザードやデザイナーが不安定なときは、Visual Studioやソリューションが持つキャッシュが壊れている場合があります。ここは「副作用が比較的小さく、戻しやすい順」で潰すのが安全です。

ソリューション単位:.vsフォルダーを削除して再生成させる

プロジェクトのルート(.slnと同じ階層)にある「.vs」フォルダーは、ローカルキャッシュの塊です。これが壊れると「開けない」「変な状態が残る」などが起きます。.vsを削除して開き直すと改善する例は多いです。

  • Visual Studioを閉じる
  • 対象ソリューション配下の「.vs」フォルダーを削除
  • Visual Studioで.slnを開き直す

Visual Studio全体:ComponentModelCacheなどをクリアする

Visual Studioは拡張や構成要素の情報をキャッシュします。これが破損すると、COM連携やパッケージ読み込みが連鎖的に失敗し、テンプレート作成やデザイナーに波及することがあります。Microsoft Q&AではComponentModelCacheの削除手順が案内されています。

代表例(ユーザー名やインスタンスIDは環境で変わります):

%LOCALAPPDATA%\Microsoft\VisualStudio\17.0_<インスタンスID>\ComponentModelCache

削除前の注意点:

  • 必ずVisual Studioを完全終了し、タスクマネージャーでdevenv.exeが残っていないことを確認する
  • 削除後の初回起動はキャッシュ再構築が走るため、いつもより起動が遅くなることがある

ログで原因を特定する(調査フェーズ)

切り分けで改善しない場合は、ログを見て「どのCOM呼び出しが落ちているか」を把握すると、次の打ち手が具体的になります。Microsoftの回答でも、イベントログ確認やVisual Studioの/log起動が提案されています。

Visual StudioのActivityLog.xmlを取得する(/log)

Visual Studioは /log で詳細ログ(ActivityLog.xml)を出力できます。既定の保存場所は、%APPDATA%\Microsoft\VisualStudio\<Version>\ActivityLog.xml です。

実行例(任意の場所に出す場合):

devenv.exe /log C:\temp\ActivityLog.xml

ログ取得の流れ:

  • /log付きで起動
  • MFCダイアログベースの新規作成を実行してエラーを再現
  • Visual Studioを閉じる
  • ActivityLog.xmlを開いて、Error/WarningやCOM関連の行を探す
探すキーワード例意図次のアクションのヒント
E_FAIL / HRESULT失敗の核となる例外直前のPackage/Component名を特定
COM / CreateInstance / CLSIDCOMアクティベーション失敗の痕跡権限・レジストリ・セキュリティソフトを疑う
Package Load / VSPackageIDE拡張(パッケージ)の読み込み失敗拡張機能無効化、キャッシュクリア、修復
Wizard / Templateテンプレート作成後処理の失敗位置作成場所・パス条件・プロジェクト名条件を見直す

Windowsのイベントログも確認する

COM関連の失敗は、Windows側のイベントログ(特にアプリケーションログ)に痕跡が残ることがあります。Microsoftの回答でもイベントログ確認が提案されています。

  • イベントビューアーを開く
  • 「Windowsログ」→「アプリケーション」を中心に、エラー発生時刻付近を確認
  • Visual Studio、.NET Runtime、Application Error、DistributedCOMなどが手掛かりになることがある

改善しない場合に試す「環境リセット」

ここからは「作業時間は増えるが、効くと一気に直る」系です。すべてを一度にやるのではなく、切り分け結果に合わせて選びます。

Visual Studio設定をリセットする(/ResetSettings)

/ResetSettings は、Visual Studioの既定設定に戻すためのスイッチです。拡張や設定の影響で挙動が壊れている場合の「全体リセット」として有効です。

devenv.exe /ResetSettings

設定リセットの前に、必要なら設定のエクスポート(バックアップ)も検討してください。リセット後はテーマやキーバインドなどが戻ります。

新しいWindowsユーザーで再現するか確認する

同じPCでも「別ユーザーでは再現しない」なら、ユーザープロファイル配下のキャッシュや権限、同期設定が原因になっている可能性が上がります。逆に別ユーザーでも再現するなら、マシン全体(インストールやセキュリティ、OS側)に原因が寄っていきます。

どうしても直らないとき:Microsoftに調査依頼する(Report a Problem)

切り分け・修復・ログ取得までやっても改善しない場合、Microsoft側に正式に調査してもらうのが最短になることがあります。Microsoft Q&Aでも、解決しない場合はReport a Problemで技術情報を添付して報告する流れが案内されています。

報告の質を上げるために、次をセットで用意すると通りやすいです。

添付・記載すると強い情報具体例狙い
再現手順VSの版、OS、作成テンプレ、保存先パス、プロジェクト名再現性を担保して調査を進めやすくする
ActivityLog.xml/logで取得したログどのパッケージ/COMが落ちたかを特定
イベントログの該当箇所エラー時刻付近の記録OS側ブロック/権限/COM起動失敗を裏取り
セーフモード結果/SafeModeだと成功するか拡張要因かどうかを明確化

よくある質問(ハマりやすいところだけ)

ビルドできるのに、なぜリソースデザイナーだけ使えない?

ビルドは主にコンパイラとリソースコンパイラが動けば成立します。一方、リソースデザイナーはIDEのパッケージ読み込みやCOM連携に依存するため、ウィザードの作成後処理がCOMで失敗すると「設計時機能だけ壊れる」状態が起きます。

再インストールしても直らないのはなぜ?

拡張機能、ユーザープロファイル配下のキャッシュ、セキュリティソフトのポリシー、作業フォルダーの制約などが原因だと、アンインストール/インストールだけでは残る要素があり、直りません。このため「Repair」や「セーフモードでの切り分け」「作成場所変更」が先に効くことがあります。

OS要因はあり得る?

多くはVisual Studio周りの環境要因で解決しますが、同種のCOM E_FAIL問題で、特定の環境ではOS変更(例:Windows 11→10)で解消したという報告も存在します。ただしこれは最終手段に近いので、まずは拡張・パス・セキュリティ・修復・ログ確認をやり切るのが現実的です。

再発を防ぐコツ(実務向け)

  • MFC/Win32のテンプレートを使う作業は、まずローカルの短いパス(例:C:\work)に作る
  • 拡張機能は「必須だけ」に絞り、更新タイミングを把握できるようにする
  • セキュリティソフトが強い環境では、開発用フォルダーとdevenv.exe周りの例外設計を最初に整える
  • 不具合が出たら、最初に /SafeMode と /log を回して“原因が拡張か否か”を即判定する

「MFCプロジェクトは作れるが、.rcやダイアログデザイナーだけ使えない」という状態は、テンプレート後処理の失敗が疑わしいサインです。上の切り分けフローで、まずは“正常に作れる状態”を取り戻し、ログで原因を潰し込むのが最短ルートです。

この記事を書いた人

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

コメント

コメントする

目次