Запуск приложений Windows с параметрами

Исследование

Для некоторых средств запуска приложений Windows в меню "Пуск" требуется передать в исполняемый файл параметры при запуске приложения Windows. Для этого сначала необходимо определить средство запуска, требующее параметра, прежде чем интегрировать приложение Windows с платформой поддержки пакетов.

Определение требования параметра средства запуска приложений Windows

  1. Установите приложение Windows на тестовом компьютере.

  2. Откройте меню "Пуск" Windows.

  3. Найдите и выберите средство запуска приложений Windows в меню "Пуск".

  4. Если приложение запускается, у вас нет никаких проблем (протестируйте все связанные средства запуска приложений Windows в меню "Пуск").

  5. Удалите приложение Windows с тестового компьютера.

  6. С помощью установочного носителя Win32 установите приложение на тестовый компьютер.

  7. Откройте меню "Пуск" Windows.

  8. Найдите и щелкните правой кнопкой мыши приложение Windows в меню "Пуск".

  9. В раскрывающемся меню выберите дополнительное>>расположение открытого файла .

  10. Щелкните правой кнопкой мыши первый связанный ярлык приложения (повторите следующие три шага для всех связанных ярлыков приложений).

  11. Выберите "Свойства " в раскрывающемся меню.

  12. Просмотрите значение в текстовом поле справа от Target. После пути к файлу приложения, если указан параметр, будет отображено окно свойств файла с параметром в месте назначения.

  13. Запишите значение параметра для будущего использования.

Резолюция

Приложения Windows перенаправляют определенные каталоги, связанные с приложением в папку C:\Program Files\WindowsApps . Если приложение попытается записать в контейнер приложений Windows, возникнет ошибка, и запись не будет выполнена.

Чтобы устранить проблему, связанную с тем, что приложение Windows не может записать данные в контейнер приложений Windows, необходимо выполнить следующие четыре действия.

  1. Разместите приложение Windows в локальном каталоге
  2. Создайте Config.json и внедрите необходимые файлы PSF
  3. Обновление файла AppxManifest приложения Windows
  4. Перепаковать и подписать приложение для Windows

Приведенные выше инструкции предоставляют рекомендации по извлечению содержимого приложения Windows в локальный промежуточный каталог, внедрению файлов исправления PSF в каталог приложений windows, настройке средства запуска приложений для указания средства запуска PSF, а затем настройке файла PSF config.json для перенаправления средства запуска PSF в приложение, указывающее рабочий каталог.

Скачивание и установка необходимых средств

Этот процесс поможет вам получить и использовать следующие средства:

  • Клиентское средство NuGet
  • Платформа поддержки пакетов
  • Пакет SDK для Windows 10 (последняя версия)
  • Монитор процессов SysInternals

Ниже приведены пошаговые инструкции по загрузке и установке необходимых средств.

  1. Скачайте последнюю (не предварительную) версию клиентского средства NuGet и сохраните nuget.exe в папке C:\PSF\nuget.

  2. Скачайте платформу поддержки пакетов с помощью Nuget , выполнив следующую команду из окна администрирования PowerShell:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. Скачайте и установите набор средств разработки программного обеспечения Windows 10 (пакет SDK для Win 10).

    1. Скачайте пакет SDK для Win 10.
    2. Запустите winsdksetup.exe, загруженный на предыдущем шаге.
    3. Нажмите кнопку Далее.
    4. Выберите только следующие три компонента для установки:
      • Средства подписывания Windows SDK для настольных приложений
      • Пакет SDK для Windows для приложений C++ UWP
      • Пакет SDK Windwos для локализации приложений UWP
    5. Нажмите кнопку Установить.
    6. Нажмите кнопку OK.

Настройка приложения Windows

После промежуточного развертывания приложения Windows мы будем извлекать или распаковывать содержимое приложения Windows в локальный каталог. После распаковки приложения Windows в промежуточное расположение можно внедрить файлы исправления PSF для исправления нежелательного поведения.

  1. Откройте окно администрирования PowerShell.

  2. Задайте следующие переменные, предназначенные для конкретного файла приложения, и версию пакета 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$((gcim Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. Распакуйте приложение 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.

  1. Откройте Visual Studio Code (VS Code) или любой другой текстовый редактор.

  2. Создайте файл, выбрав меню "Файл " в верхней части VS Code, выбрав новый файл в раскрывающемся меню.

  3. Сохраните файл как config.json, выбрав меню "Файл " в верхней части окна VS Code, выбрав "Сохранить " в раскрывающемся меню. В окне "Сохранить как" перейдите в промежуточный каталог приложения Windows (C:\PSF\Staging\PSFSampleApp) и задайте имя файла как config.json. Выберите кнопку Сохранить.

  4. Скопируйте следующий код в созданный файлconfig.json .

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "arguments": ""
            }
        ]
    }
    
  5. Откройте промежуточный файл приложения 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>
    
  6. applications.id Задайте значение в config.json то же значение, что и в поле Applications.Application.ID файла AppxManifest.xml. Изображение, окружающее расположение идентификатора в файле AppxManifest.

  7. Укажите значение в applications.executable, чтобы задать относительный путь к приложению, указанному в поле Applications.Application.Executable файла AppxManifest.xml. Изображение, окружающее расположение исполняемого файла в файле AppxManifest.

  8. applications.arguments Задайте значение в config.json для сопоставления с аргументом, используемым для запуска приложения. Ознакомьтесь с записанным значением из заключительного шага исследования - Определение параметра средства запуска приложений Windows .

  9. applications.workingdirectory Задайте значение в config.json, чтобы указать относительный путь к папке, найденной в поле Applications.Application.Запускаемый файла AppxManifest.xml. Изображение, выделяющее расположение рабочего каталога в файле AppxManifest.

  10. Сохраните обновленный файлconfig.json .

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "arguments": "/bootfromsettingshortcut"
            }
        ]
    }
    
  11. Скопируйте следующие четыре файла из Package Support Framework в зависимости от архитектуры исполняемого файла приложения в корневой каталог подготовленного приложения 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, ассоциированный с архитектурой приложений.

  1. Откройте проводник и перейдите в папку приложения MSIX staged (C:\PSF\Staging\PSFSampleApp).

  2. Щелкните правой кнопкой мыши AppxManifest.xmlи выберите "Открыть с кодом" в раскрывающемся меню (при необходимости можно открыть с помощью другого текстового редактора).

  3. Обновите файл AppxManifest.xml со следующими сведениями:

    <Package ...>
    ...
    <Applications>
        <Application Id="PSFSample"
                    Executable="PSFLauncher32.exe"
                    EntryPoint="Windows.FullTrustApplication">
        ...
        </Application>
    </Applications>
    </Package>
    

Переупакуйте приложение.

Все исправления были применены, теперь приложение Windows может быть повторно упаковано в MSIX и подписано с помощью сертификата подписи кода.

  1. Откройте окно администрирования PowerShell.

  2. Задайте следующие переменные:

    $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$((gcim Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. Перепакуйте приложение Windows из предварительной папки, выполнив следующий командлет PowerShell.

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
    
  4. Подпишите приложение Windows, запустив следующую командлету PowerShell:

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\signtool.exe sign /v /fd sha256 /f $CodeSigningCert /p $CodeSigningPass $AppPath