다음을 통해 공유


Application capability profiler (ACP)

패키지된 애플리케이션은 샌드박스 외부의 리소스에 액세스해야 할 수 있습니다. 이러한 리소스의 예로는 사용자 파일, 사진, 레지스트리 항목, 카메라, 위치 및 마이크 등이 있습니다. 기능 선언을 사용하면 샌드박스가 적용된 애플리케이션이 일부 리소스에 액세스할 수 있습니다. 선언은 샌드박스 애플리케이션의 패키지 매니페스트에서 이루어집니다. 참조는 msix-packaging-tool을 참조하세요.

애플리케이션 기능 프로파일러가 애플리케이션 패키지에서 선언해야 하는 기능을 식별하는 데 도움이 되는 도구 집합이므로 필요한 리소스 액세스 권한이 부여됩니다. 또한 애플리케이션 패키지의 실패한 액세스 시도에 대한 유용한 진단 정보를 제공합니다.

Important

이 기능은 미리 보기 상태입니다. 일부 정보는 상업용으로 출시되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.

프로파일링을 위한 대상 시스템 준비

프로파일링을 위해 대상 시스템을 설정하려면 다음 단계가 필요합니다.

  1. 사용자 계정에 대상 Windows 시스템에 대한 관리자 권한이 있는지 확인합니다.

  2. 대상 시스템에서 개발자 모드를 사용하도록 설정합니다. 이 설정은 Windows 설정 | 개인 정보 보호 및 & 보안 | 개발자를 위한 것입니다. 자세한 내용은 개발에 디바이스 사용 을 참조하세요.

  3. Azure PowerShell 7.3 또는 그 이상을 설치합니다. 설치 지침은 Windows 에 PowerShell 설치를 참조하세요.

    Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler 모듈 호환성에 필요합니다.

  4. 아직 설치되지 않은 경우 WPR(Windows 성능 레코더)을 설치하고 PATH에 추가합니다.

    지침은 Windows 성능 레코더 를 참조하세요.

    Get-Command wpr
    

    PowerShell 명령 프롬프트에서 실행되는 Get-Command cmdlet을 보여 주는 스크린샷

  5. 애플리케이션 기능 프로파일러 보관 파일을 다운로드하여 편리한 경로로 추출합니다.

    애플리케이션 기능 프로파일러 보관 파일은 이 프로젝트의 릴리스 자산에서 다운로드할 수 있습니다.

  6. msix-packaging-tool의 지침에 따라 애플리케이션을 패키징하고 대상 시스템에 설치합니다.

  7. 대상 애플리케이션 패키지 매니페스트(권장) 및/또는 대상 애플리케이션 패키지 전체 이름을 가져옵니다.

    1. (권장) 대상 애플리케이션 패키지 매니페스트를 가져옵니다. 이 작업을 수행하는 가장 쉬운 방법은 MSIX 패키징 도구 를 사용하여 열고 매니페스트 복사본을 편리한 경로에 저장하는 것입니다.

      파일 열기 단추가 강조 표시된 MSIX 패키징 도구의 패키지 정보 섹션을 보여 주는 스크린샷

      저장되는 매니페스트 파일을 보여 주는 스크린샷

      Windows 저장 대화 상자에 저장되는 매니페스트 파일을 보여 주는 스크린샷

    2. PowerShell에서 다음 명령을 실행하여 애플리케이션 패키지 전체 이름을 가져옵니다.

      Get-AppxPackage | where-object {$_.name -like '*Test-AppSilo*'}
      

      Get-AppxPackage 명령 출력을 보여 주는 스크린샷

  8. (선택 사항) Windows 성능 분석기 설치합니다. 지침은 Windows Performance Analyzer 를 참조하세요. 프로파일링에는 필요하지 않지만 ACP에서 캡처하고 출력하는 일부 데이터를 시각화하는 데 유용할 수 있습니다.

PowerShell 모듈 가져오기

모듈에 대한 정보는 Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler에서 찾을 수 있습니다.

관리자 권한으로 PowerShell에서 다음 명령을 실행하여 모듈을 가져옵니다.

Import-Module .\Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler.dll

참고 항목

Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler.dll 모듈은 위의 프로파일링 지침을 위해 대상 시스템 준비의 5단계에서 보관 파일에서 추출된 ACP 폴더에 있습니다.

프로파일링 시작

Start-Profiling cmdlet은 대상 애플리케이션 패키지 매니페스트 또는 애플리케이션 패키지의 전체 이름에 대한 경로를 사용합니다.

Start-Profiling 은 추적 로깅을 위해 대상 애플리케이션 패키지를 계측하고 대상 애플리케이션 패키지에서 수행한 액세스 시도에 대해 추적 로깅 공급자를 사용하도록 설정합니다. 자세한 내용은 Start-Profiling 를 참조하세요.

관리자 권한으로 PowerShell에서 다음 명령을 실행하여 프로파일링은 시작합니다.

Start-Profiling -ManifestPath TestApp-AppXManifest.xml

시작 프로파일링 cmdlet을 실행하는 PowerShell 명령 창을 보여 주는 스크린샷

애플리케이션 시나리오 실행합니다.

이 단계에서는 모든 중요한 애플리케이션 시나리오를 실행하는 것이 중요합니다. 프로파일링 결과는 이 단계에서 실행되는 시나리오만큼 포괄적입니다. 더 많은 애플리케이션 시나리오가 실행될수록 위에서 시작된 추적 로깅 세션에 의해 캡처된 데이터의 양이 점점 더 많아집니다.

Stop profiling

Stop-Profiling cmdlet은 시작된 액세스 시도 추적 로깅 세션을 중지하고 추적 로깅을 위해 계측된 모든 애플리케이션 패키지에 대한 계측을 제거합니다.

Stop-Profiling 은 출력 이벤트 추적 로그(.etl) 파일에 사용되는 경로를 제어하는 선택적 추적 경로 매개 변수를 허용합니다. 기본적으로 <current_directory>\trace.etl입니다. 자세한 내용은 Stop-Profiling 를 참조하세요.

관리자 권한으로 PowerShell에서 다음 명령을 실행하여 프로파일링을 중지합니다.

Stop-Profiling

Stop-Profiling cmdlet을 실행하는 PowerShell 명령 창을 보여 주는 스크린샷

프로파일링 결과 가져오기

Get-ProfilingResults cmdlet은 위의 단계에서 가져온 추적 파일을 구문 분석하고 추적에서 식별된 애플리케이션 패키지에 필요한 기능을 찾습니다. 특정 패키지에 대한 필터를 지정하지 않는 한 추적에서 식별된 모든 애플리케이션 패키지에 대한 기능과 정보를 출력합니다.

Get-ProfilingResults 는 구문 분석할 추적 파일의 경로를 허용합니다. 경로가 제공되지 않으면 Get-ProfilingResultsStop-Profiling 을 호출하여 구문 분석할 추적을 가져오려고 시도합니다.

Get-ProfilingResults 는 필요에 따라 대상 애플리케이션 매니페스트의 경로를 사용합니다. 구문 분석된 추적의 정보가 대상 애플리케이션 패키지 매니페스트에 기인할 수 있는 경우 파일은 출력 기능으로 직접 편집됩니다. 그렇지 않으면 추적에서 식별된 각 패키지에 대해 매니페스트의 복사본이 만들어지며 식별된 기능이 추가됩니다.

자세한 내용은 Get-ProfilingResults 을 참조하세요.

다음 명령은 추적 파일을 구문 분석하고 결과를 출력합니다.

Get-ProfilingResults -EtlFilePaths trace.etl -ManifestPath TestApp-AppXManifest.xml

Get-ProfilingResults cmdlet을 실행하는 PowerShell 명령 창을 보여 주는 스크린샷

앱 다시 패키지

새로 식별된 기능을 사용하여 대상 애플리케이션을 다시 패키지하려면 다음을 수행합니다.

  1. 대상 애플리케이션 패키지 매니페스트에 새로 식별된 기능을 포함합니다(제공된 경우 Get-ProfilingResults 에서 매니페스트를 직접 편집함).
  2. msix-packaging-too l의 지침에 따라 대상 애플리케이션을 새 기능으로 다시 패키징하고 다시 설치합니다.

Helper cmdlets

Merge-ProfilingResults cmdlet을 사용하여 Get-ProfilingResults 의 여러 실행에서 출력을 병합할 수 있습니다.

프로파일링 출력 해석

Get-ProfilingResults 의 출력은 다음으로 구성됩니다.

  1. 매니페스트 형식의 기능

    사용자가 -ManifestPath 스위치 그리고 와 를 사용하여 편집할 매니페스트를 제공하고 매니페스트가 속한 패키지가 입력 추적에서 식별되는 경우 Get-ProfilingResults 는 패키지 추적에 식별된 기능을 포함하도록 매니페스트 파일을 직접 편집합니다. 그렇지 않으면 추적 파일에서 식별된 각 패키지에 대해 Get-ProfilingResults 는 해당 패키지에 대한 추적에서 식별된 기능을 가진 <Capabilities> 요소를 포함하는 <package full name><manifest name>.xml 이라는 파일을 출력합니다.

    참고 항목

    Get-ProfilingResults 에서 식별할 수 있는 두 가지 특수한 종류의 기능이 있습니다. 이러한 결과는 출력 매니페스트에 XML 주석으로 플래그가 지정됩니다.

    • 개인 정보 보호에 민감한 기능: 이러한 기능은 카메라, 위치 및 마이크와 같은 개인 정보 보호에 민감한 리소스를 보호합니다. 애플리케이션 패키지에서 이러한 리소스에 액세스해야 하는 경우 이러한 기능을 선언해야 합니다. 그러나 기능 선언만으로는 대상 개인 정보 보호에 중요한 리소스에 대한 애플리케이션 액세스를 보장하기에 충분하지 않을 수 있습니다. 개인 정보 설정에서 사용자는 애플리케이션에 대한 리소스 액세스를 계속 부여하거나 거부할 수 있습니다.
    • 프롬프트 기능: Get-ProfilingResults 는 프롬프트 기능이 애플리케이션 패키지에 적용될 수 있음을 식별할 때 이 기능을 "주석 처리" 형식으로 출력합니다. 패키지 매니페스트에 선언된 경우 애플리케이션은 에서 로의 대체 프롬프트로 선택됩니다. 애플리케이션에서 프롬프트에 적합한 리소스에 대한 액세스가 거부될 때마다 사용자 프롬프트가 발급됩니다. 이렇게 하면 사용자에게 리소스에 대한 액세스 권한을 명시적으로 부여하거나 거부할 수 있습니다. 대체 프롬프트는 샌드박스를 방해하고 약화시킬 수 있으므로 중요한 애플리케이션 시나리오에 필요한 경우에만 주의해서 사용해야 합니다.
  2. AccessAttemptRecords.csv

    구문 분석된 추적 이벤트 및 애플리케이션 패키지에 대해 기록된 실패한 각 액세스 시도에 대한 자세한 진단 정보를 포함하는 쉼표로 구분된 값 파일입니다.

  3. summary.txt

    Get-ProfilingResults의 모든 실행에 대한 요약입니다. 각 실행은 이 파일에 추가됩니다. -SummaryOutputPath 를 사용하여 이 파일 경로를 수정할 수 있습니다.

    요약에는 구문 분석된 입력, 대상 애플리케이션 패키지 및 실행 파일, 식별된 기능, 편집된 매니페스트 콘텐츠 및 애플리케이션 패키지가 액세스하려고 했지만 식별된 기능이 없는 모든 리소스의 요약된 목록이 포함됩니다.

참고 항목

대상 애플리케이션이 패키지될 때 이러한 리소스에 액세스할 수 없을 수 있습니다.

  1. README.txt

    이 파일에는 Get-ProfilingResults의 모든 실행에 대한 정보가 포함되어 있습니다. 스크립트가 실행되면 이 파일에 추가됩니다.

    README는 구문 분석된 입력, 대상 애플리케이션 패키지, 파일 출력 및 해당 경로에 대한 정보와 문제 해결 가이드를 제공합니다.

스택 추적

ACP 보관 파일에는 ACP-StackTrace.wpaProfile이라는 파일이 포함되어 있습니다. 이 WPA(Windows 성능 분석기)에 대한 프로필입니다. 이를 통해 Stop-Profiling에서 캡처한 이벤트 추적 로그 파일에 대한 스택 추적 시각화를 사용할 수 있습니다. 액세스 시도, 대상 및 시도를 실행한 스택을 구분합니다. 이렇게 하면 대상 애플리케이션이 특정 리소스에 액세스할 수 없는 이유를 보다 완벽하게 이해할 수 있습니다.

trace.etl에서 Stop-Profiling에 의해 캡처된 액세스 시도 스택을 시각화하려면 다음을 수행합니다.

  1. WPA에서 trace.etl 파일을 엽니다.

  2. 애플리케이션 기호 및 Microsoft 공용 기호 서버를 가리키도록 WPA 기호 경로를 구성합니다.

    Windows 성능 분석기 기호 로드를 보여 주는 스크린샷

  3. 기호를 로드합니다.

  4. ACP-StackTrace.wpaProfile에서 프로필을 적용하여 액세스 시도 스택 시각화를 봅니다.

    프로필을 적용하는 Windows 성능 분석기 보여 주는 스크린샷

    액세스 시도 스택 시각화를 보는 Windows 성능 분석기 보여 주는 스크린샷

Microsoft.Windows.Win32Isolation.ApplicationCapabilityProfiler

Start-Profiling

Stop-Profiling

Get-ProfilingResults

Merge-ProfilingResults

msix 패키징 도구

기능 선언

Windows Performance Recorder

Windows Performance Analyzer

Windows에 PowerShell 설치