Устранение ошибок разрешений записи файловой системы поддержки пакетов
В этой статье описывается, как использовать платформу поддержки пакетов (PSF) для устранения ошибки разрешения на запись файловой системы.
Приложения Windows перенаправляют определенные каталоги, связанные с приложениями, в папку C:\Program Files\WindowsApps
. Если приложение пытается записать в контейнер приложения Windows, триггеры ошибок и запись завершается ошибкой. Чтобы устранить эту проблему, можно внести улучшения в пакет приложения Windows.
Исследование
Сначала определите сбой и пути к каталогу, запрашиваемые приложением.
Запись сбоя приложения Windows
Фильтрация результатов является необязательным, но упрощает просмотр сбоев, связанных с приложением. Чтобы отфильтровать результаты, создайте два правила фильтра. Первый фильтр включает имя процесса приложения, а второй фильтр содержит результаты, которые не являются успешными.
Скачайте и извлеките монитор процессов SysInternals в каталог C:\PSF\ProcessMonitor .
Откройте проводник Windows и перейдите к извлеченной папке SysInternals ProcessMonitor .
Выберите procmon.exe-файл монитора процессов SysInternals, чтобы запустить приложение.
Если появится запрос UAC, нажмите кнопку "Да".
В окне фильтра монитора процессов выберите имя процесса в раскрывающемся меню первого поля.
Убедитесь, что он отображается в следующем поле.
В следующем поле введите имя процесса приложения, например PSFSample.exe.
Выберите Добавить.
В окне фильтра монитора процессов выберите "Результат" в раскрывающемся меню первого поля.
В следующем поле выберите не в раскрывающемся меню.
В текстовом поле введите SUCCESS.
Выберите Добавить, а затем нажмите кнопку ОК.
Запустите приложение Windows, активируйте ошибку и закройте приложение Windows.
Просмотр журналов сбоев приложений Windows
После записи процессов приложения Windows изучите результаты, чтобы определить, связан ли сбой с рабочим каталогом.
Просмотрите результаты сбоя монитора процессов SysInternals. Если результаты включают в себя запрет доступа, с требуемым доступом : универсальные сведения о записи для приложения, предназначенные для C:\Program Files\WindowsApps\...\, вы определили сбой разрешения записи, связанный с рабочим каталогом.
Если вы определите эту ошибку, примените к приложению следующую коррекцию PSF.
Разрешение
Чтобы устранить проблему с приложением Windows, не выполнив запись в контейнер приложений Windows, выполните следующие действия.
- Извлеките содержимое приложения Windows в локальный промежуточный каталог.
- Создайте config.json и вставьте файлы исправления PSF в каталог поэтапного приложения Windows.
- Настройте средство запуска приложения, чтобы указать средство запуска PSF и настроить файл PSF config.json для перенаправления средства запуска PSF, указав рабочий каталог.
- Обновите файл AppxManifest приложения Windows.
- Перепакуть и подписать приложение Для Windows.
Скачивание и установка необходимых средств
Для этого процесса требуются следующие средства:
- Клиентское средство NuGet
- Платформа поддержки пакетов (PSF)
- Набор средств разработки программного обеспечения Windows 10 (пакет SDK для Win 10), последняя версия
- Монитор процессов SysInternals
Чтобы скачать и установить NuGet и PSF, выполните приведенные ниже действия.
Скачайте последнюю версию клиентского средства NuGet и сохраните nuget.exe в C:\PSF\nuget.
Скачайте и установите платформу поддержки пакетов с помощью NuGet, выполнив следующую команду из административного окна PowerShell:
Set-Location "C:\PSF" .\nuget\nuget.exe install Microsoft.PackageSupportFramework
Чтобы скачать и установить пакет SDK для Windows 10, выполните указанные ниже действия.
- Скачайте пакет SDK для Win 10.
- Запустите winsdksetup.exe .
- Выберите Далее.
- Выберите только следующие три функции:
- Средства подписывания Windows SDK для классических приложений;
- Windows SDK для приложений UWP C++;
- Пакет SDK Windwos для локализации приложений UWP
- Нажмите кнопку "Установить", а затем нажмите кнопку "ОК".
Этап приложения Windows
Промежуточное приложение Windows извлекает и распаковает содержимое приложения в локальный каталог. После распаковки приложения Windows в промежуточное расположение можно внедрить файлы исправления PSF для исправления любых нежелательных возможностей.
В окне администрирования PowerShell задайте следующие переменные для конкретного файла приложения и версии пакета SDK для Windows 10:
$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
Распакуите приложение Windows в промежуточную папку, выполнив следующий командлет PowerShell:
## 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.
Откройте Visual Studio Code или другой текстовый редактор.
Создайте файл с именем config.json в промежуточном каталоге приложения Windows, C:\PSF\Staging\PSFSampleApp.
Скопируйте следующий код в созданный файл config.json .
{ "applications": [ { "id": "", "executable": "" } ], "processes": [ { "executable": "", "fixups": [ { "dll": "", "config": { "redirectedPaths": { "packageRelative": [ { "base": "", "patterns": [ "" ] } ] } } } ] } ] }
Откройте файл AppxManifest.xml в промежуточной папке приложения Windows. В следующем примере показан файл AppxManifest.xml :
<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>
Внесите следующие изменения в файл config.json :
applications.id
Задайте для значения то же значение, что и вApplications.Application.ID
поле файла AppxManifest.xml.applications.executable
Задайте значение для назначения относительного пути к приложению, расположенному вApplications.Application.Executable
поле AppxManifest.xml файла.applications.workingdirectory
Задайте значение для целевого пути относительной папки вApplications.Application.Executable
поле AppxManifest.xml файла.process.executable
Задайте значение для целевого имени файла без пути и расширения вApplications.Application.Executable
поле файла AppxManifest.xml.processes.fixups.dll
Задайте значение для целевого объекта, зависящееFileRedirectionFixup.dll
от архитектуры. Если исправление предназначено для архитектуры x64, задайте значениеFileRedirectionFixup64.dll
. Если архитектура x86 или неизвестна, задайте значениеFileRedirectionFixup86.dll
.processes.fixups.config.redirectedPaths.packageRelative.base
Задайте значение пути к папке относительно пакета вApplications.Application.Executable
поле файла AppxManifest.xml.Задайте значение, соответствующее
processes.fixups.config.redirectedPaths.packageRelative.patterns
типу файла, создаваемому приложением. При использовании.*\\.log
PSF перенаправляет все файлы журнала, записываемыеprocesses.fixups.config.redirectedPaths.packageRelative.base
в каталог и дочерние каталоги.
Сохраните обновленный файл config.json . В следующем примере показан обновленный файл config.json :
{ "applications": [ { "id": "PSFSample", "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe" } ], "processes": [ { "executable": "PSFSample", "fixups": [ { "dll": "FileRedirectionFixup64.dll", "config": { "redirectedPaths": { "packageRelative": [ { "base": "VFS/ProgramFilesX64/PS Sample App/", "patterns": [ ".*\\.log" ] } ] } } } ] } ] }
Скопируйте следующие файлы из платформы поддержки пакетов для исполняемой архитектуры приложения в корневой каталог промежуточного приложения Windows. Файлы можно найти в .\Microsoft.PackageSupportFramework.\<Version>\bin.
Приложение (x64) Приложение (x86) PSFLauncher64.exe PSFLauncher32.exe PSFRuntime64.dll PSFRuntime32.dll PSFRunDll64.exe PSFRunDll32.exe FileRedirectionFixup64.dll FileRedirectionFixup64.dll
Обновление AppxManifest
После создания и обновления файла config.json обновите файл AppxManifest.xml приложения Windows для каждого средства запуска приложений Windows, который вы включили в config.json. Теперь AppxManifest.xml Applications
должна быть нацелена на PSFLauncher.exe , связанную с архитектурой приложения.
- Откройте AppxManifest.xml в папке приложения MSIX, C:\PSF\Staging\PSFSampleApp.
- Обновите 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
Перепакуите приложение Windows из промежуточной папки, выполнив следующий командлет PowerShell:
Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
Подпишите приложение Windows, выполнив следующий командлет PowerShell:
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 Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по