次の方法で共有


x86 デスクトップ アプリのトラブルシューティング

Von Bedeutung

Visual Studio 2017 以降では、アプリを Arm64 または Arm64EC に再コンパイルして、アプリが完全なネイティブ速度で実行されるようにすることができます。 Arm64 としてのコンパイルの詳細については、ブログ記事「Arm 開発での Windows 10 の公式サポート」を参照してください。 Arm64EC の詳細については、「 Arm64EC: Building Native and Interoperable Apps for Windows 11 on Arm」を参照してください。

x86 デスクトップ アプリが x86 コンピューターで動作しない場合は、トラブルシューティングに役立つガイダンスを次に示します。

問題点 解決策
アプリは、Arm 用に設計されていないドライバーに依存しています。 x86 ドライバーを Arm64 に再コンパイルします。 WDKを使用した Arm64 ドライバーの構築 を参照してください。
アプリは x64 でのみ使用できます。 Microsoft Store 向けに開発する場合は、Arm バージョンのアプリを提出してください。 詳細については、「 アプリ パッケージのアーキテクチャ」を参照してください。 Win32 開発者の場合は、アプリを Arm64 に再コンパイルすることをお勧めします。 詳細については、 Arm 開発での Windows 10 の Visual Studio サポートの早期プレビューを参照してください。
アプリで 1.1 より後の OpenGL バージョンが使用されているか、ハードウェアアクセラレータの OpenGL が必要です。 使用可能な場合は、アプリの DirectX モードを使用します。 DirectX 9、DirectX 10、DirectX 11、DirectX 12 を使用する x86 アプリは、Arm で動作します。 詳細については、「 DirectX グラフィックスとゲーム」を参照してください。
x86 アプリが期待どおりに動作しません。 Arm 上のプログラム互換性トラブルシューティング ツールのガイダンスに従って 、互換性のトラブルシューティング ツールを使用してみてください。 その他のトラブルシューティング手順については、 Arm での x86 アプリのトラブルシューティングに関する 記事を参照してください。

WOW のベスト プラクティス

一般的な問題の 1 つは、アプリが WOW で実行されていることを検出し、それが x64 システム上にあることを前提としたときに発生します。 この想定を行った後、アプリは次のことを行う可能性があります。

  • Arm ではサポートされていない x64 バージョンのそれ自体をインストールしてみてください。
  • ネイティブ レジストリ ビューで他のソフトウェアを確認します。
  • 64 ビットの .NET フレームワークが使用できるものとします。

一般に、アプリは WOW で実行すると判断された場合に、ホスト システムに関する想定を行うべきではありません。 OS のネイティブ コンポーネントとの対話は可能な限り避けてください。

アプリでは、ネイティブ レジストリ ビューの下にレジストリ キーを配置したり、WOW の存在に基づいて関数を実行したりできます。 元の IsWow64Process は、アプリが x64 コンピューターで実行されているかどうかを示します。 アプリでは 、ISWow64Process2 を使用して、WOW サポートがあるシステムで実行されているかどうかを判断する必要があります。

ドライバー

すべてのカーネル モード ドライバー、 User-Mode ドライバー フレームワーク (UMDF) ドライバー、および印刷ドライバーは、OS のアーキテクチャに合わせてコンパイルする必要があります。 x86 アプリにドライバーがある場合は、そのドライバーを Arm64 用に再コンパイルする必要があります。 x86 アプリはエミュレーションで正常に実行される場合があります。ただし、そのドライバーは Arm64 用に再コンパイルする必要があり、ドライバーに依存するすべてのアプリ エクスペリエンスは利用できません。 Arm64 のドライバーのコンパイルの詳細については、「WDK を使用した Arm64 ドライバーのビルド」を参照してください。

シェル拡張

Windows コンポーネントをフックしたり、DLL を Windows プロセスに読み込んだりしようとするアプリは、システムのアーキテクチャに合わせて DLL を再コンパイルする必要があります。つまり、Arm64 です。 通常、これらは入力メソッド エディター (IME)、支援テクノロジ、シェル拡張機能アプリ (エクスプローラーでクラウド ストレージ アイコンを表示したり、右クリックコンテキスト メニューを表示したりするために) によって使用されます。 アプリまたは DLL を Arm64 に再コンパイルする方法については、Arm 開発に関する Windows 10 の Visual Studio サポートの早期プレビューに関 するブログ投稿を参照してください。

デバッグ

アプリの動作をより詳しく調査するには、「 Arm でのデバッグ 」を参照して、Arm でのデバッグ用のツールと戦略の詳細を確認してください。

Virtual Machines

Windows ハイパーバイザー プラットフォームは、Qualcomm Snapdragon 835 Mobile PC プラットフォームではサポートされていません。 そのため、Hyper-V を使用した仮想マシンの実行は機能しません。 今後のクアルコムチップセットに対して、これらの技術への投資を続けています。

動的コード生成

X86 デスクトップ アプリは、実行時に Arm64 命令を生成するシステムによって Arm64 でエミュレートされます。 つまり、x86 デスクトップ アプリがそのプロセスで動的なコードの生成や変更を妨げている場合、そのアプリを Arm64 で x86 として実行することはできません。

これは、 setProcessMitigationPolicy API と ProcessDynamicCodePolicy フラグを使用して、一部のアプリがプロセスで有効にするセキュリティ軽減策です。 Arm64 で x86 プロセスとして正常に実行するには、この軽減ポリシーを無効にする必要があります。