Платформа поддержки пакетов — исправление рабочего каталога
Исследование
Приложения Windows перенаправляют определенные каталоги, связанные с приложением в папку C:\Program Files\WindowsApps
. Если приложение создает вложенную папку (C:\Program Files\Vendor\subfolder
) как часть установки, а затем вызывает эту вложенную папку, она не сможет найти каталог, так как он не существует.
С помощью платформы поддержки пакетов (PSF) можно улучшить пакет приложения Windows для устранения этой проблемы. Во-первых, необходимо определить сбой и пути к каталогу, запрашиваемые приложением.
Запись сбоя приложения Windows
Фильтрация результатов является необязательным шагом, что упрощает просмотр связанных с приложением сбоев. Для этого мы создадим два правила фильтрации. Первый фильтр включения имени процесса приложения, а второй — включение любых результатов, которые не являются успешными.
- Скачайте и извлеките монитор процессов SysInternals в каталог C:\PSF\ProcessMonitor .
- Откройте Windows Обозреватель и перейдите к извлеченной папке монитора процессов SysInternals
- Дважды щелкните файл монитора процессов SysInternals (procmon.exe), запустите приложение.
- Если появится запрос UAC, нажмите кнопку "Да ".
- В окне фильтра монитора процессов выберите первое раскрывающееся меню, помеченное архитектурой.
- Выберите имя процесса в раскрывающемся меню.
- В следующем раскрывающемся меню убедитесь, что он задан со значением.
- В текстовом поле введите имя процесса приложения (пример: PSFSample.exe).
- Нажмите кнопку Добавить.
- В окне фильтра монитора процессов выберите первое раскрывающееся меню " Имя процесса".
- Выберите результат в раскрывающемся меню.
- В следующем раскрывающемся меню выберите его и выберите его не из раскрывающегося меню.
- В типе текстового поля: SUCCESS.
- Нажмите кнопку Добавить.
- Нажмите кнопку OK.
- запустите приложение Windows, активируйте ошибку и закройте приложение Windows.
Просмотр журналов сбоев приложений Windows
После записи процессов приложения Windows результаты должны быть расследованы, чтобы определить, связан ли сбой с рабочим каталогом.
- Просмотрите результаты монитора процессов SysInternals, найдите ошибки, описанные в приведенной выше таблице.
- Если в результатах отображается результат "Имя не найдено" , с подробными сведениями "Требуемый доступ: ..." для конкретного приложения, предназначенным для каталога вне статьи "C:\Program Files\WindowsApps\...\" (как показано на приведенном ниже рисунке), вы успешно определили сбой, связанный с рабочим каталогом, используйте статью о поддержке PSF — доступ к файловой системе, чтобы узнать, как применить исправление PSF к приложению.
Разрешение
Приложения Windows перенаправляют определенные каталоги, связанные с приложением в папку C:\Program Files\WindowsApps
. Если приложение создает вложенную папку (C:\Program Files\Vendor\subfolder
) как часть установки, а затем вызывает эту вложенную папку, она не сможет найти каталог, так как он не существует.
Чтобы устранить проблему, связанную с приложением Windows, ссылающимся на неправильный рабочий каталог, необходимо выполнить следующие четыре действия:
- Этап приложения Windows в локальный каталог
- Создание файла Config.json и внедрение необходимых файлов PSF
- Обновление файла AppxManifest приложения Windows
- Перепаковка и регистрация приложения Для Windows
Приведенные выше инструкции по извлечению содержимого приложения Windows в локальный каталог этапов, внедрение файлов исправлений PSF в каталог поэтапного приложения Windows, настройка средства запуска приложений для указания средства запуска PSF, а затем настройка файла PSF config.json для перенаправления средства запуска PSF в приложение, указывающее рабочий каталог.
Скачивание и установка необходимых средств
Этот процесс поможет вам получить и использовать следующие средства:
- Клиентское средство NuGet
- Платформа поддержки пакетов
- Пакет SDK для Windows 10 (последняя версия)
- Монитор процессов SysInternals
Ниже приведены пошаговые инструкции по загрузке и установке необходимых средств.
Скачайте последнюю версию клиентского средства NuGet и сохраните nuget.exe в папке
C:\PSF\nuget
.Скачайте платформу поддержки пакетов с помощью Nuget, выполнив следующую команду из окна Администратор istrative PowerShell:
Set-Location "C:\PSF" .\nuget\nuget.exe install Microsoft.PackageSupportFramework
Скачайте и установите набор средств разработки программного обеспечения Windows 10 (пакет SDK для Win 10).
- Скачайте пакет SDK для Win 10.
- Запустите winsdksetup.exe, скачанный на предыдущем шаге.
- Нажмите кнопку Далее.
- Выберите только следующие три компонента для установки:
- Средства подписывания Windows SDK для классических приложений;
- Windows SDK для приложений UWP C++;
- Пакет SDK Windwos для локализации приложений UWP
- Нажмите кнопку Установить.
- Нажмите кнопку OK.
Этап приложения Windows
Промежуточное приложение Для Windows мы будем извлекать или распаковывать содержимое приложения Windows в локальный каталог. После распаковки приложения Windows в промежуточное расположение файлы исправления PSF можно внедрить, исправляя любые нежелательные возможности.
Откройте окно Администратор istrative 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 (VS Code) или любой другой текстовый редактор.
Создайте файл, выбрав меню "Файл " в верхней части VS Code, выбрав новый файл в раскрывающемся меню.
Сохраните файл как config.json, выбрав меню "Файл " в верхней части окна VS Code, выбрав "Сохранить " в раскрывающемся меню. В окне "Сохранить как" перейдите в промежуточный каталог приложения Windows (C:\PSF\Staging\PSFSampleApp) и задайте имя файла как
config.json
. Выберите кнопку Сохранить.Скопируйте следующий код в созданный файл config.json .
{ "applications": [ { "id": "", "executable": "", "workingDirectory": "" } ], "processes": [ { "executable": "" } ] }
Откройте промежуточный файл приложения Windows AppxManifest , расположенный в промежуточной папке приложения Windows (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml) с помощью VS Code или другого текстового редактора.
<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, расположенном в
Package.Applications.Application
поле идентификатора приложений в файле config.json.Скопируйте относительный путь пакета из поля исполняемого файла, расположенного в файле AppxManifest.xml, расположенном в
Package.Applications.Application
поле "Исполняемые приложения" в файле config.json.Скопируйте относительный родительский путь пакета из поля исполняемого файла, расположенного в файле AppxManifest.xml, расположенном в
Package.Applications.Application
поле Application WorkingDirectory в файле config.json.Скопируйте имя исполняемого файла из поля исполняемого файла, расположенного в файле AppxManifest.xml, расположенном в
Package.Applications.Application
поле Исполняемые процессы в файле config.json.Сохраните обновленный файл 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.<Версия>\bin.
Приложение (x64) Приложение (x86) PSFLauncher64.exe PSFLauncher32.exe PSFRuntime64.dll PSFRuntime32.dll PSFRunDll64.exe PSFRunDll32.exe
Обновление AppxManifest
После создания и обновления файла config.json необходимо обновить appxManifest.xml приложения Windows для каждого средства запуска приложений Windows, который был включен в файл config.json. Приложения AppxManifest теперь должны нацеливать PSFLauncher.exe, связанный с архитектурой приложений.
Откройте проводник и перейдите в папку приложения MSIX staged (C:\PSF\Staging\PSFSampleApp).
Щелкните правой кнопкой мыши AppxManifest.xml и выберите "Открыть с кодом " в раскрывающемся меню (при необходимости можно открыть с помощью другого текстового редактора).
Обновите xml-файл AppxManifest.xml со следующими сведениями:
<Package ...> ... <Applications> <Application Id="PSFSample" Executable="PSFLauncher32.exe" EntryPoint="Windows.FullTrustApplication"> ... </Application> </Applications> </Package>
Повторно упаковав приложение
Все исправления были применены, теперь приложение Windows может быть повторно упаковано в MSIX и подписано с помощью сертификата подписи кода.
Откройте окно PowerShell Администратор istrative.
Задайте следующие переменные:
$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 как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по