web-dev-qa-db-ja.com

c ++ / cli DLL Win 8.1では失敗します

win32/net DLLを作成しましたが、Win XP、Win7、8では正常に動作しますが、Win 8.1では失敗します。

依存関係ウォーカーは言う:API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLLが見つかりません(user32.dllが呼び出します)

Googleは、MSが8.1で一部のSystem-DLLを変更し(互換性を無視)、そのため、多くのプログラムで同じ問題が発生することを意味します。

「ファイルが見つかりません」の完全なリスト:

API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL
API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL
MSVCR120.DLL
API-MS-WIN-CORE-SHUTDOWN-L1-1-1.DLL
API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL
EXT-MS-WIN-NTUSER-UICONTEXT-EXT-L1-1-0.DLL
IESHIMS.DLL

誰かがこれを修正する方法を知っていますか?

18
user3600403

Dependency Walkerの静的分析は信頼できません。 Dependency Walkerが静的分析に基づいてこれらのDLLに関する問題を報告するという事実は、これが実際に問題であることを意味するものではありません。静的分析で説明するように、完全に細かい実行可能ファイルが問題を報告することは正常ですが、完全に適切に実行されます。

現在、Dependency Walkerによるアプリケーションの評価を調べています。問題があると思われるファイルのリストが、あなたとまったく同じです。しかし、アプリケーションは完全に適切に実行されます。簡単に言えば、あなたは偽陽性を見ています。

マイクロソフトは、オペレーティングシステムをアップグレードする際に互換性を無視していません。逆に、優れた互換性を維持するために並外れた長さになります。

Dependency Walkerを使用してネイティブDLLの依存関係の問題をデバッグする場合は、[プロファイル]メニューを使用して動的モードで使用する必要があります。これにより、実行時にロードに失敗した依存関係がわかります(実際にそれが問題である場合)。しかし、管理対象と管理対象外のバランスがどこにあるかに応じて、Dependency Walkerはそのジョブに適したツールではない可能性があります。

そして、あなたの問題はネイティブの依存関係の問題ではないかもしれません。最初のステップは、問題を正確に診断することです。発生したエラーの詳細は不明なので、この質問の範囲を超えています。

19
David Heffernan