Troubleshooting x86 desktop apps
중요
Visual Studio 2017 이상에서는 앱이 최대 네이티브 속도로 실행되도록 앱을 Arm64 또는 Arm64EC로 다시 컴파일할 수 있습니다. Arm64로 컴파일하는 방법에 대한 자세한 내용은 블로그 게시물: Arm 개발에서 Windows 10에 대한 공식 지원을 참조하세요. Arm64EC에 대한 자세한 내용은 Arm64EC 발표: Arm 에서 Windows 11 네이티브 및 상호 운용 가능한 앱 빌드를 참조하세요.
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 모범 사례
앱이 WOW에서 실행되는 것을 발견하고 x64 시스템에 있는 것으로 가정할 때 한 가지 일반적인 문제점이 발생합니다. 이렇게 가정한 경우, 앱은 다음을 수행할 수 있습니다.
- Arm에서 지원되지 않는 x64 버전을 설치해 보세요.
- 기본 레지스트리 보기에서 다른 소프트웨어를 확인하십시오.
- 64비트 .NET Framework를 사용할 수 있는 것으로 가정하십시오.
일반적으로 앱은 WOW에서 실행되는지 결정할 때 호스트 시스템에 대해 가정하지 않아야 합니다. 가능한 한 운영 체제의 기본 구성 요소와 상호 작용하지 않도록 합니다.
앱은 기본 레지스트리 보기에서 레지스트리 키를 배치하거나 WOW의 존재 여부에 따라 기능을 수행할 수 있습니다. 원래 IsWow64Process는 앱이 x64 머신에서 실행되고 있는지 여부만 나타냅니다. 이제 앱은 IsWow64Process2를 사용하여 WOW를 지원하는 시스템에서 실행하고 있는지를 확인해야 합니다.
드라이버
모든 커널 모드 드라이버, UMDF(사용자 모드 드라이버 프레임워크) 드라이버 및 인쇄 드라이버가 운영 체제의 아키텍처와 일치하도록 컴파일되어야 합니다. x86 앱에 드라이버가 있는 경우, Arm64용으로 해당 드라이버를 다시 컴파일해야 합니다. x86 앱은 에뮬레이션에서 제대로 실행될 수 있지만 Arm64용으로 드라이버를 다시 컴파일해야 하며 이때 드라이버에 종속된 앱 환경을 사용할 수 없습니다. Arm64용 드라이버를 컴파일하는 방법에 대한 자세한 내용은 WDK를 사용하여 Arm64 드라이버 빌드를 참조하세요.
셸 확장
Windows 구성 요소를 후크하거나 해당 DLL을 Windows 프로세스에 로드하려는 앱은 시스템 아키텍처와 일치하도록 해당 DLL을 다시 컴파일해야 합니다. 즉 Arm64가 됩니다. 일반적으로 입력기(IME), 보조 기술 및 셸 확장 앱(예: 탐색기에서 클라우드 저장소 아이콘 표시 또는 컨텍스트 메뉴 오른쪽 마우스로 클릭)에 의해 사용됩니다. 앱 또는 DLL을 Arm64로 다시 컴파일하는 방법을 알아보려면 Arm 개발에서 Windows 10 대한 Visual Studio 지원의 초기 미리 보기 블로그 게시물을 참조하세요.
디버깅
앱의 동작을 더 자세히 조사하려면 Arm에서 디버깅을 참조하여 Arm에서 디버깅하기 위한 도구 및 전략에 대해 자세히 알아보세요.
가상 머신
Windows 하이퍼바이저 플랫폼은 Qualcomm Snapdragon 835 모바일 PC 플랫폼에서 지원되지 않습니다. 따라서 Hyper-V를 사용하여 가상 머신을 실행할 수 없습니다. 현재 미래의 Qualcomm 칩셋 기술에 계속 투자하고 있습니다.
동적 코드 생성
X86 데스크톱 앱은 런타임에 Arm64 명령을 생성하는 시스템에 의해 Arm64에서 에뮬레이트됩니다. 즉, x86 데스크톱 앱이 프로세스에서 동적 코드 생성 또는 수정을 방지하는 경우 해당 앱은 Arm64에서 x86으로 실행되도록 지원할 수 없다는 의미가 됩니다.
이것은 일부 앱이 ProcessDynamicCodePolicy
플래그와 함께 SetProcessMitigationPolicy API를 사용하여 프로세스에서 사용하도록 설정하는 보안 완화 기능입니다. Arm64에서 x86 프로세스로 성공적으로 실행하려면 이 완화 정책을 사용하지 않도록 설정해야 합니다.
Windows on Arm