Delen via


Windows-apps starten met parameters

Onderzoek

Voor sommige startprogramma's voor Windows-apps in het startmenu moet het gebruik van parameters worden doorgegeven aan het uitvoerbare bestand bij het starten van de Windows-app. Hiervoor moeten we eerst het startprogramma identificeren waarvoor de parameter is vereist voordat de Windows-app wordt geïntegreerd met het Package Support Framework.

Parametervereiste voor startprogramma voor Windows-apps identificeren

  1. Installeer uw Windows-app op een testmachine.

  2. Open het Startmenu van Windows.

  3. Zoek en selecteer het startprogramma voor Windows-apps in het startmenu.

  4. Als de app wordt gestart, hebt u geen problemen (test alle bijbehorende startprogramma's voor Windows-apps in het startmenu).

  5. Verwijder de Windows-app van de testmachine.

  6. Installeer de toepassing op uw testcomputer met behulp van de Win32-installatiemedia.

  7. Open het Startmenu van Windows.

  8. Zoek en klik met de rechtermuisknop op uw Windows-app vanuit het startmenu.

  9. Selecteer Meer>>bestandslocatie openen in de vervolgkeuzelijst.

  10. Klik met de rechtermuisknop op de eerste gekoppelde toepassingssnelkoppeling (herhaal de volgende drie stappen voor alle bijbehorende toepassingssnelkoppelingen).

  11. Selecteer Eigenschappen in de vervolgkeuzelijst.

  12. Controleer de waarde in het tekstvak rechts van Target. Na het toepassingsbestandpad, als er een parameter wordt vermeld, zal deze app het venster Bestandseigenschap met parameter in het doel tonen

  13. Noteer de parameterwaarde voor toekomstig gebruik.

Resolutie / Besluit

Windows-apps leiden specifieke mappen om die betrekking hebben op de toepassing naar de C:\Program Files\WindowsApps map. Als een toepassing probeert te schrijven naar de Windows-app-container, wordt er een fout geactiveerd en mislukt de schrijfbewerking.

Om het probleem op te lossen waarbij de Windows-app niet kan schrijven naar de Windows-app-container, moeten we de volgende vier stappen uitvoeren:

  1. De Windows-app in een lokale map plaatsen
  2. Creëer de Config.json en voeg de vereiste PSF-bestanden in
  3. Het Windows AppxManifest-bestand bijwerken
  4. De Windows-app opnieuw verpakken en ondertekenen

De bovenstaande stappen bieden richtlijnen voor het extraheren van de inhoud van de Windows-app naar een lokale gefaseerde map, het injecteren van de PSF-fixupbestanden in de gefaseerde map van de Windows-app, het configureren van het startprogramma voor toepassingen zodat deze verwijst naar het startprogramma voor PSF en vervolgens het PSF-config.json-bestand configureert om het PSF-startprogramma om te leiden naar de app die de werkmap opgeeft.

Vereiste hulpprogramma's downloaden en installeren

Dit proces begeleidt u bij het ophalen van en het gebruik van de volgende hulpprogramma's:

  • NuGet-clienthulpprogramma
  • Pakketondersteuningsraamwerk
  • Windows 10 SDK (nieuwste versie)
  • SysInternals Proces Monitor

Hieronder vindt u stapsgewijze instructies voor het downloaden en installeren van de vereiste hulpprogramma's.

  1. Download de nieuwste versie (niet-preview) van het NuGet-clienthulpprogramma en sla de nuget.exe op in de C:\PSF\nuget map.

  2. Download het Package Support Framework met nuget door het volgende uit te voeren vanuit een PowerShell-venster met beheerdersrechten:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. Download en installeer de Windows 10 Software Development Toolkit (Win 10 SDK).

    1. Download de Win 10 SDK.
    2. Voer de winsdksetup.exe uit die in de vorige stap is gedownload.
    3. Selecteer de knop Volgende .
    4. Selecteer alleen de volgende drie functies voor installatie:
      • Hulpprogramma's voor windows-SDK-ondertekening voor desktop-apps
      • Windows SDK voor UWP C++-apps
      • Windwos SDK voor LOKALISATIE VAN UWP-apps
    5. Selecteer de knop Installeren .
    6. Selecteer de knop OK .

De Windows-app klaar maken

Door de Windows-app te faseren, wordt de inhoud van de Windows-app geëxtraheerd/uitgepakt in een lokale map. Zodra de Windows-app is uitgepakt naar de faseringslocatie, kunnen PSF-fixupbestanden worden geïnjecteerd voor het corrigeren van ongewenste ervaringen.

  1. Open een PowerShell-venster met beheerdersrechten.

  2. Stel de volgende variabelen in die gericht zijn op uw specifieke app-bestand en windows 10 SDK-versie:

    $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. Pak de Windows-app uit in de stagingmap door de volgende PowerShell-cmdlet uit te voeren:

    ## 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"
    

Vereiste PSF-bestanden maken en injecteren

Als u corrigerende acties wilt toepassen op de Windows-app, moet een config.json-bestand worden gemaakt en opgegeven met informatie over het startprogramma voor Windows-apps dat mislukt. Als er meerdere startprogramma's voor Windows-apps zijn die problemen ondervinden, kan het config.json-bestand worden bijgewerkt met meerdere vermeldingen.

Nadat het config.json-bestand is bijgewerkt, moeten het config.json-bestand en de ondersteunende PSF-fixupbestanden worden verplaatst naar de hoofdmap van het Windows-app-pakket.

  1. Open Visual Studio Code (VS Code) of een andere teksteditor.

  2. Maak een nieuw bestand door boven aan VS Code het menu Bestand te selecteren en nieuw bestand te selecteren in de vervolgkeuzelijst.

  3. Sla het bestand op als config.json, door het menu Bestand boven aan het VS Code-venster te selecteren en Opslaan te selecteren in de vervolgkeuzelijst. Navigeer in het venster Opslaan als naar de map voor fasering van windows-apps (C:\PSF\Staging\PSFSampleApp) en stel de bestandsnaam in op config.json. Selecteer de knop Opslaan .

  4. Kopieer de volgende code naar het zojuist gemaakte config.json-bestand .

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "arguments": ""
            }
        ]
    }
    
  5. Open het gefaseerde Windows-app AppxManifest-bestand in de faseringsmap van de Windows-app (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml) met behulp van VS Code of een andere teksteditor.

    <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. Stel de applications.id waarde in de config.json in op dezelfde waarde als in het Applications.Application.ID veld van het AppxManifest.xml-bestand . Afbeelding die de locatie van de ID in het AppxManifest-bestand omcirkelt.

  7. Stel de applications.executable waarde in de config.json in om het relatieve pad naar de toepassing in het veld Applications.Application.Executable van het AppxManifest.xml-bestand te richten. Afbeelding rond de locatie van het uitvoerbare bestand in het AppxManifest-bestand.

  8. Stel de applications.arguments waarde in de config.json in zodat deze overeenkomt met het argument dat wordt gebruikt om de toepassing te starten. Bekijk de vastgelegde waarde uit de laatste stap van het onderzoek - Richtlijnen voor het identificeren van parameters voor het startprogramma voor Windows-apps .

  9. Stel de applications.workingdirectory waarde in de config.json in om het relatieve mappad dat gevonden wordt in het veld Applications.Application.Executable van het AppxManifest.xml-bestand te richten. Afbeelding rond de locatie van de werkmap in het AppxManifest-bestand.

  10. Sla het bijgewerkte config.json-bestand op.

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "arguments": "/bootfromsettingshortcut"
            }
        ]
    }
    
  11. Kopieer de volgende vier bestanden uit het Package Support Framework op basis van de uitvoerbare architectuur van de toepassing naar de hoofdmap van de gefaseerde Windows-app. De volgende bestanden bevinden zich in het .\Microsoft.PackageSupportFramework.<Versie>\bin.

    Toepassing (x64) Toepassing (x86)
    PSFLauncher64.exe PSFLauncher32.exe
    PSFRuntime64.dll PSFRuntime32.dll
    PSFRunDll64.exe PSFRunDll32.exe

AppxManifest bijwerken

Nadat u het config.json-bestand hebt gemaakt en bijgewerkt, moet de AppxManifest.xml van de Windows-app worden bijgewerkt voor elk startprogramma voor Windows-apps dat is opgenomen in de config.json. De toepassingen van AppxManifest moeten nu gericht zijn op de PSFLauncher.exe die zijn gekoppeld aan de toepassingsarchitectuur.

  1. Open Bestandsverkenner en navigeer naar de map Gefaseerde MSIX-app (C:\PSF\Staging\PSFSampleApp).

  2. Klik met de rechtermuisknop op AppxManifest.xmlen selecteer Openen met code in de vervolgkeuzelijst (U kunt desgewenst openen met een andere teksteditor).

  3. Werk het AppxManifest.xml-bestand bij met de volgende informatie:

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

De toepassing opnieuw verpakken

Alle correcties zijn toegepast, nu kan de Windows-app opnieuw worden verpakt in een MSIX en zijn ondertekend met behulp van een certificaat voor ondertekening van programmacode.

  1. Open een PowerShell-venster met beheerdersrechten.

  2. Stel de volgende variabelen in:

    $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. Verpak de Windows-app opnieuw vanuit de stagingmap door de volgende PowerShell-cmdlet uit te voeren:

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
    
  4. Onderteken de Windows-app door de volgende PowerShell-cmdlet uit te voeren:

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