패키지 지원 프레임워크 - 작업 디렉터리 수정
조사
Windows 앱은 애플리케이션과 관련된 특정 디렉터리를 폴더로 C:\Program Files\WindowsApps
리디렉션합니다. 애플리케이션이 설치의 일부로 하위 폴더(C:\Program Files\Vendor\subfolder
)를 만들고 나중에 이 하위 폴더를 호출하는 경우 디렉터리가 없으므로 디렉터리를 찾지 못합니다.
PSF(패키지 지원 프레임워크)를 사용하여 이 문제를 해결하기 위해 Windows 앱 패키지를 개선할 수 있습니다. 먼저 앱에서 요청하는 오류 및 디렉터리 경로를 식별해야 합니다.
Windows 앱 오류 캡처
결과 필터링은 애플리케이션 관련 오류를 더 쉽게 볼 수 있도록 하는 선택적 단계입니다. 이렇게 하려면 두 개의 필터 규칙을 만듭니다. 첫 번째는 애플리케이션 프로세스 이름에 대한 포함 필터이고, 두 번째는 성공하지 못한 결과를 포함하는 것입니다.
- SysInternals 프로세스 모니터를 다운로드하여 C:\PSF\ProcessMonitor 디렉터리로 추출합니다.
- Windows 탐색기를 열고 추출된 SysInternals 프로세스 모니터 폴더로 이동합니다.
- SysInternals 프로세스 모니터(procmon.exe) 파일을 두 번 클릭하여 앱을 시작합니다.
- UAC에서 메시지가 표시되면 예 단추를 선택합니다.
- 프로세스 모니터 필터 창에서 아키텍처로 레이블이 지정된 첫 번째 드롭다운 메뉴를 선택합니다.
- 드롭다운 메뉴에서 프로세스 이름을 선택합니다.
- 다음 드롭다운 메뉴에서 값 이 is로 설정되어 있는지 확인합니다.
- 텍스트 필드에 앱의 프로세스 이름(예: PSFSample.exe)을 입력합니다.
- 추가 단추를 선택합니다.
- 프로세스 모니터 필터 창에서 프로세스 이름이라는 레이블이 지정된 첫 번째 드롭다운 메뉴를 선택합니다.
- 드롭다운 메뉴에서 결과를 선택합니다.
- 다음 드롭다운 메뉴에서 선택하고 드롭다운 메뉴에서 선택 하지 않습니다 .
- 텍스트 필드에 SUCCESS를 입력합니다.
- 추가 단추를 선택합니다.
- 확인 단추를 선택합니다.
- Windows 앱을 시작하고, 오류를 트리거하고, Windows 앱을 닫습니다.
Windows 앱 오류 로그 검토
Windows 앱 프로세스를 캡처한 후 결과를 조사하여 오류가 작업 디렉터리와 관련되어 있는지 확인해야 합니다.
- 위의 표에 설명된 오류를 검색하여 SysInternals 프로세스 모니터 결과를 검토합니다.
- 결과에 "C:\Program Files\WindowsApps\...\"(아래 이미지와 같이) 외부의 디렉터리를 대상으로 하는 특정 앱에 대해 "Desired Access: ..." 세부 정보가 포함된 "이름을 찾을 수 없음" 결과가 표시되면 작업 디렉터리와 관련된 오류를 성공적으로 식별한 다음 PSF 지원 - 파일 시스템 액세스 문서를 사용하여 PSF 수정을 앱에 적용하는 방법에 대한 지침을 참조하세요.
해결
Windows 앱은 애플리케이션과 관련된 특정 디렉터리를 폴더로 C:\Program Files\WindowsApps
리디렉션합니다. 애플리케이션이 설치의 일부로 하위 폴더(C:\Program Files\Vendor\subfolder
)를 만들고 나중에 이 하위 폴더를 호출하는 경우 디렉터리가 없으므로 디렉터리를 찾지 못합니다.
잘못된 작업 디렉터리를 참조하는 Windows 앱과 관련된 문제를 해결하려면 다음 네 단계를 수행해야 합니다.
- 로컬 디렉터리에 Windows 앱 스테이징
- Config.json을 만들고 필요한 PSF 파일 삽입
- Windows 앱 AppxManifest 파일 업데이트
- Windows 앱 재패키지 및 서명
위의 단계에서는 Windows 앱의 콘텐츠를 로컬 스테이징 디렉터리에 추출하고, PSF 수정 파일을 준비된 Windows 앱 디렉터리에 삽입하고, PSF 시작 관리자를 가리키도록 애플리케이션 시작 관리자 구성한 다음, PSF 시작 관리자를 작업 디렉터리를 지정하는 앱으로 리디렉션하도록 PSF config.json 파일을 구성하는 지침을 제공합니다.
필수 도구 다운로드 및 설치
이 프로세스는 다음 도구의 검색 및 사용을 안내합니다.
- NuGet 클라이언트 도구
- 패키지 지원 프레임워크
- Windows 10 SDK(최신 버전)
- SysInternals 프로세스 모니터
다음은 필요한 도구를 다운로드하고 설치하는 방법에 대한 단계별 지침을 제공합니다.
NuGet 클라이언트 도구의 최신(미리 보기가 아닌) 버전을 다운로드하고 nuget.exe를 폴더에
C:\PSF\nuget
저장합니다.관리Istrative PowerShell 창에서 다음을 실행하여 Nuget을 사용하여 패키지 지원 프레임워크를 다운로드합니다.
Set-Location "C:\PSF" .\nuget\nuget.exe install Microsoft.PackageSupportFramework
Windows 10 소프트웨어 개발 도구 키트(Win 10 SDK)를 다운로드하여 설치합니다.
- Win 10 SDK를 다운로드합니다.
- 이전 단계에서 다운로드한 winsdksetup.exe를 실행합니다.
- 다음 버튼을 선택합니다.
- 설치를 위해 다음 세 가지 기능만 선택합니다.
- 데스크톱 앱용 Windows SDK 서명 도구
- UWP C++ 앱용 Windows SDK
- UWP 앱 지역화용 Windwos SDK
- 설치 단추를 선택합니다.
- 확인 단추를 선택합니다.
Windows 앱 스테이징
Windows 앱을 준비하면 Windows 앱의 콘텐츠를 추출/압축을 풀고 로컬 디렉터리로 압축을 풉니다. Windows 앱이 준비 위치로 압축을 풀면 PSF 수정 파일을 삽입하여 원치 않는 환경을 수정할 수 있습니다.
관리이상 PowerShell 창을 엽니다.
특정 앱 파일 및 Windows 10 SDK 버전을 대상으로 하는 다음 변수를 설정합니다.
$AppPath = "C:\PSF\SourceApp\PSFSampleApp.msix" ## Path to the MSIX App Installer $StagingFolder = "C:\PSF\Staging\PSFSampleApp" ## Path to where the MSIX App will be staged $OSArchitecture = "x$((gwmi Win32_Processor).AddressWidth)" ## Operating System Architecture $Win10SDKVersion = "10.0.19041.0" ## Latest version of the Win10 SDK
다음 PowerShell cmdlet을 실행하여 Windows 앱을 스테이징 폴더로 압축을 풀 수 있습니다.
## Sets the directory to the Windows 10 SDK Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" ## Unpackages the Windows app to the staging folder .\makeappx.exe unpack /p "$AppPath" /d "$StagingFolder"
필요한 PSF 파일 만들기 및 삽입
Windows 앱에 수정 작업을 적용하려면 config.json 파일을 만들고 실패하는 Windows 앱 시작 관리자에 대한 정보를 제공해야 합니다. 문제가 발생하는 Windows 앱 시작 관리자가 여러 개 있는 경우 config.json 파일을 여러 항목으로 업데이트할 수 있습니다.
config.json 파일을 업데이트한 후 config.json 파일 및 지원 PSF 수정 파일을 Windows 앱 패키지의 루트로 이동해야 합니다.
VS Code(Visual Studio Code) 또는 다른 텍스트 편집기를 엽니다.
VS Code 맨 위에 있는 파일 메뉴를 선택하고 드롭다운 메뉴에서 새 파일을 선택하여 새 파일을 만듭니다.
VS Code 창 맨 위에 있는 파일 메뉴를 선택하고 드롭다운 메뉴에서 저장을 선택하여 파일을 config.json으로 저장합니다. 다른 이름으로 저장 창에서 Windows 앱 준비 디렉터리(C:\PSF\Staging\PSFSampleApp)로 이동하고 파일 이름을 .로
config.json
설정합니다. 저장 단추를 선택합니다.다음 코드를 새로 만든 config.json 파일에 복사합니다.
{ "applications": [ { "id": "", "executable": "", "workingDirectory": "" } ], "processes": [ { "executable": "" } ] }
VS Code 또는 다른 텍스트 편집기를 사용하여 Windows 앱 준비 폴더(C:\PSF\Staging\PSFSampleApp\AppxManifest.xml)에 있는 준비된 Windows 앱 AppxManifest 파일을 엽니다.
<Applications> <Application Id="PSFSAMPLE" Executable="VFS\ProgramFilesX64\PS Sample App\PSFSample.exe" EntryPoint="Windows.FullTrustApplication"> <uap:VisualElements BackgroundColor="transparent" DisplayName="PSFSample" Square150x150Logo="Assets\StoreLogo.png" Square44x44Logo="Assets\StoreLogo.png" Description="PSFSample"> <uap:DefaultTile Wide310x150Logo="Assets\StoreLogo.png" Square310x310Logo="Assets\StoreLogo.png" Square71x71Logo="Assets\StoreLogo.png" /> </uap:VisualElements> </Application> </Applications>
AppxManifest.xml 파일에 있는 ID 필드의 값을 config.json 파일
Package.Applications.Application
의 애플리케이션 ID 필드에 복사합니다.AppxManifest.xml 파일에 있는 실행 파일의 실행 파일에서 config.json 파일
Package.Applications.Application
의 애플리케이션 실행 파일 필드로 패키지 상대 경로를 복사합니다.AppxManifest.xml 파일에 있는 실행 파일 필드의 패키지 상대 부모 경로를 config.json 파일
Package.Applications.Application
의 Applications WorkingDirectory 필드에 복사합니다.AppxManifest.xml 파일에 있는 실행 파일 필드의 실행 파일 이름을 config.json 파일
Package.Applications.Application
의 프로세스 실행 파일 필드에 복사합니다.업데이트 된 config.json 파일을 저장합니다.
{ "applications": [ { "id": "PSFSample", "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe", "workingDirectory": "VFS/ProgramFilesX64/PS Sample App/" } ], "processes": [ { "executable": "PSFSample" } ] }
애플리케이션 실행 아키텍처를 기반으로 패키지 지원 프레임워크에서 스테이징된 Windows 앱의 루트로 다음 세 파일을 복사합니다. 다음 파일은 .\Microsoft.PackageSupportFramework 내에 있습니다.<Version>\bin.
애플리케이션(x64) 애플리케이션(x86) PSF시작 관리자64.exe PSF시작 관리자32.exe PSFRuntime64.dll PSFRuntime32.dll PSFRunDll64.exe PSFRunDll32.exe
AppxManifest 업데이트
config.json 파일을 만들고 업데이트한 후에는 config.json에 포함된 각 Windows 앱 시작 관리자에 대해 Windows 앱의 AppxManifest.xml을 업데이트해야 합니다. AppxManifest의 애플리케이션은 이제 애플리케이션 아키텍처와 연결된 PSF시작 관리자.exe를 대상으로 해야 합니다.
파일 탐색기 열고 스테이징된 MSIX 앱 폴더(C:\PSF\Staging\PSFSampleApp)로 이동합니다.
AppxManifest.xml을 마우스 오른쪽 단추로 클릭하고 드롭다운 메뉴에서 코드로 열기를 선택합니다(필요에 따라 다른 텍스트 편집기를 사용하여 열 수 있습니다).
AppxManifest.xml 파일을 다음 정보로 업데이트합니다.
<Package ...> ... <Applications> <Application Id="PSFSample" Executable="PSFLauncher32.exe" EntryPoint="Windows.FullTrustApplication"> ... </Application> </Applications> </Package>
애플리케이션 다시 패키지
모든 수정 사항이 적용되었으므로 이제 Windows 앱을 MSIX로 다시 패키지하고 코드 서명 인증서를 사용하여 서명할 수 있습니다.
관리이상 PowerShell 창을 엽니다.
다음 변수를 설정합니다.
$AppPath = "C:\PSF\SourceApp\PSFSampleApp_Updated.msix" ## Path to the MSIX App Installer $CodeSigningCert = "C:\PSF\Cert\CodeSigningCertificate.pfx" ## Path to your code signing certificate $CodeSigningPass = "<Password>" ## Password used by the code signing certificate $StagingFolder = "C:\PSF\Staging\PSFSampleApp" ## Path to where the MSIX App will be staged $OSArchitecture = "x$((gwmi Win32_Processor).AddressWidth)" ## Operating System Architecture $Win10SDKVersion = "10.0.19041.0" ## Latest version of the Win10 SDK
다음 PowerShell cmdlet을 실행하여 스테이징 폴더에서 Windows 앱을 다시 패키지합니다.
Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
다음 PowerShell cmdlet을 실행하여 Windows 앱에 서명합니다.
Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" .\signtool.exe sign /v /fd sha256 /f $CodeSigningCert /p $CodeSigningPass $AppPath
피드백
https://aka.ms/ContentUserFeedback을 참조하세요.
출시 예정: 2024년 내내 콘텐츠 피드백 메커니즘인 GitHub 문제를 단계적으로 폐지하고 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은다음에 대한 사용자 의견 제출 및 보기