Package Support Framework - Correzione della directory di lavoro

Analisi

Le app di Windows reindirizzeranno directory specifiche correlate all'applicazione alla C:\Program Files\WindowsApps cartella. Se un'applicazione crea una sottocartella (C:\Program Files\Vendor\subfolder) come parte dell'installazione e in seguito chiama questa sottocartella, non riuscirà a trovare la directory perché non esiste.

Usando Package Support Framework (PSF), è possibile apportare miglioramenti al pacchetto dell'app di Windows per risolvere questo problema. Prima di tutto, è necessario identificare l'errore e i percorsi di directory richiesti dall'app.

Acquisire l'errore dell'app di Windows

Il filtro dei risultati è un passaggio facoltativo che semplifica la visualizzazione degli errori correlati all'applicazione. A tale scopo, verranno create due regole di filtro. Il primo filtro di inclusione per il nome del processo dell'applicazione e il secondo è un'inclusione di tutti i risultati che non hanno esito positivo.

  1. Scaricare ed estrarre SysInternals Process Monitor nella directory C:\PSF\ProcessMonitor .
  2. Aprire Esplora risorse e passare alla cartella di Monitoraggio processi SysInternals estratta
  3. Fare doppio clic sul file SysInternals Process Monitor (procmon.exe), avviando l'app.
  4. Se richiesto da Controllo dell'account utente, selezionare il pulsante Sì .
  5. Nella finestra Filtro monitoraggio processi selezionare il primo menu a discesa con etichetta Architettura.
  6. Selezionare Nome processo dal menu a discesa.
  7. Nel menu a discesa successivo verificare che sia impostato con il valore di è .
  8. Nel campo di testo digitare il nome del processo dell'app (esempio: PSFSample.exe). Example of the Process Monitor Filter Windows with App Name
  9. Seleziona il pulsante Aggiungi.
  10. Nella finestra Filtro monitoraggio processi selezionare il primo menu a discesa con etichetta Nome processo.
  11. Selezionare Risultato dal menu a discesa.
  12. Nel menu a discesa successivo selezionarlo e selezionarlo non dal menu a discesa.
  13. Nel campo di testo digitare: SUCCESS. Example of the Process Monitor Filter Windows with Result
  14. Seleziona il pulsante Aggiungi.
  15. Selezionare il pulsante OK .
  16. avviare l'app di Windows, attivare l'errore e chiudere l'app di Windows.

Esaminare i log degli errori delle app di Windows

Dopo aver acquisito i processi dell'app di Windows, i risultati dovranno essere esaminati per identificare se l'errore è correlato alla directory di lavoro.

  1. Esaminare i risultati di SysInternals Process Monitor, cercando gli errori descritti nella tabella precedente.
  2. Se i risultati mostrano un risultato "Nome non trovato", con i dettagli "Accesso desiderato: ..." per l'app specifica destinata a una directory esterna all'articolo "C:\Programmi\WindowsApps\...\" (come illustrato nell'immagine seguente), è stato identificato correttamente un errore correlato alla directory di lavoro, usare l'articolo Supporto PSF - Accesso al file system per indicazioni su come applicare la correzione PSF all'app. Displays the error message witnessed in the SysInternals Process Monitor for failure to write to directory.

Risoluzione

Le app di Windows reindirizzeranno directory specifiche correlate all'applicazione alla C:\Program Files\WindowsApps cartella. Se un'applicazione crea una sottocartella (C:\Program Files\Vendor\subfolder) come parte dell'installazione e in seguito chiama questa sottocartella, non riuscirà a trovare la directory perché non esiste.

Per risolvere il problema relativo all'app di Windows che fa riferimento a una directory di lavoro non corretta, è necessario seguire i quattro passaggi seguenti:

  1. Preparare l'app di Windows in una directory locale
  2. Creare il file Config.json e inserire i file PSF necessari
  3. Aggiornare il file AppxManifest dell'app di Windows
  4. Ripacchetto e firmare l'app di Windows

I passaggi precedenti forniscono indicazioni tramite l'estrazione del contenuto dell'app di Windows in una directory a fasi locale, l'inserimento dei file di correzione PSF nella directory dell'app windows a fasi, la configurazione dell'utilità di avvio dell'applicazione in modo che punti all'utilità di avvio PSF, quindi la configurazione del file PSF config.json per reindirizzare l'utilità di avvio PSF all'app specificando la directory di lavoro.

Scaricare e installare gli strumenti necessari

Questo processo consente di eseguire il recupero e l'utilizzo degli strumenti seguenti:

  • Strumento client NuGet
  • PSF (Package Support Framework)
  • Windows 10 SDK (versione più recente)
  • SysInternals Process Monitor

Di seguito verranno fornite istruzioni dettagliate sul download e l'installazione degli strumenti necessari.

  1. Scaricare la versione più recente (non di anteprima) dello strumento client NuGet e salvare nuget.exe nella C:\PSF\nuget cartella .

  2. Scaricare Package Support Framework usando Nuget eseguendo il comando seguente da una finestra di PowerShell Amministrazione istrative:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. Scaricare e installare Windows 10 Software Development Toolkit (Win 10 SDK).

    1. Scaricare Win 10 SDK.
    2. Eseguire winsdksetup.exe scaricato nel passaggio precedente.
    3. Seleziona il pulsante Avanti.
    4. Selezionare solo le tre funzionalità seguenti per l'installazione:
      • Strumenti di firma di Windows SDK per app desktop
      • App C++ di Windows SDK per UWP
      • Windwos SDK per la localizzazione di app UWP
    5. Selezionare il pulsante Installa.
    6. Selezionare il pulsante OK .

Preparare la fase dell'app di Windows

Eseguendo l'staging dell'app di Windows, verrà estratto/decompresso il contenuto dell'app di Windows in una directory locale. Dopo che l'app di Windows è stata decompressa nel percorso di gestione temporanea, i file di correzione PSF possono essere inseriti correggendo eventuali esperienze indesiderate.

  1. Aprire una finestra di PowerShell Amministrazione istrativa.

  2. Impostare le variabili seguenti destinate al file dell'app specifico e alla versione di 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
    
  3. Decomprimere l'app di Windows nella cartella di staging eseguendo il cmdlet di PowerShell seguente:

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

Creare e inserire i file PSF necessari

Per applicare azioni correttive all'app di Windows, è necessario creare un file config.json e specificarlo con informazioni sull'utilità di avvio delle app di Windows non riuscita. Se sono presenti più utilità di avvio delle app di Windows che riscontrano problemi, il file config.json può essere aggiornato con più voci.

Dopo aver aggiornato il file config.json , il file config.json e il supporto dei file di correzione PSF devono quindi essere spostati nella radice del pacchetto dell'app di Windows.

  1. Aprire Visual Studio Code (VS Code) o qualsiasi altro editor di testo.

  2. Creare un nuovo file selezionando il menu File nella parte superiore di VS Code, selezionando Nuovo file dal menu a discesa.

  3. Salvare il file come config.json, selezionando il menu File nella parte superiore della finestra di VS Code, selezionando Salva dal menu a discesa. Nella finestra Salva con nome passare alla directory di gestione temporanea dell'app di Windows (C:\PSF\Staging\PSFSampleApp) e impostare il nome file come config.json. Selezionare il pulsante Salva.

  4. Copiare il codice seguente nel file config.json appena creato.

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "workingDirectory": ""
            }
        ],
        "processes": [
            {
                "executable": ""
            }
        ]
    }
    
  5. Aprire il file app AppxManifest di Windows in gestione temporanea che si trova nella cartella di gestione temporanea dell'app di Windows (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml) usando VS Code o un altro editor di testo.

    <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. Copiare il valore nel campo ID che si trova nel file AppxManifest.xml che si trova nel Package.Applications.Application campo ID applicazione nel file config.json . Image circling the location of the ID within the AppxManifest file.

  7. Copiare il percorso relativo al pacchetto dal campo Eseguibile che si trova nel file AppxManifest.xml che si trova nel Package.Applications.Application campo Eseguibile applicazioni nel file config.json. Image circling the location of the executable within the AppxManifest file.

  8. Copiare il percorso padre relativo al pacchetto dal campo Eseguibile che si trova nel file AppxManifest.xml che si trova nel Package.Applications.Application campo Applications WorkingDirectory nel file config.json . Image circling the location of the working directory within the AppxManifest file.

  9. Copiare il nome dell'eseguibile dal campo Eseguibile che si trova nel file AppxManifest.xml che si trova nel Package.Applications.Application campo Processi eseguibili nel file config.json . Image circling the location of the process executable within the AppxManifest file.

  10. Salvare il file config.json aggiornato.

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "workingDirectory": "VFS/ProgramFilesX64/PS Sample App/"
            }
        ],
        "processes": [
            {
            "executable": "PSFSample"
            }
        ]
    }
    
  11. Copiare i tre file seguenti da Package Support Framework in base all'architettura eseguibile dell'applicazione nella radice dell'app windows di staging. I file seguenti si trovano all'interno di .\Microsoft.PackageSupportFramework.<Version>\bin.

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

Aggiornare AppxManifest

Dopo aver creato e aggiornato il file config.json , l'app di Windows AppxManifest.xml deve essere aggiornata per ogni utilità di avvio delle app di Windows inclusa in config.json. Le applicazioni di AppxManifest devono ora essere destinate a PSFLauncher.exe associato all'architettura delle applicazioni.

  1. Aprire Esplora file e passare alla cartella App MSIX a fasi (C:\PSF\Staging\PSFSampleApp).

  2. Fare clic con il pulsante destro del mouse su AppxManifest.xml e scegliere Apri con codice dal menu a discesa (facoltativamente, è possibile aprire con un altro editor di testo).

  3. Aggiornare il file AppxManifest.xml con le informazioni seguenti:

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

Ri-creare un pacchetto dell'applicazione

Tutte le correzioni sono state applicate, ora l'app di Windows può essere riconfezionata in un FILE MSIX e firmata usando un certificato di firma del codice.

  1. Aprire una finestra di PowerShell Amministrazione istrativa.

  2. Imposta le variabili seguenti:

    $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
    
  3. Ricomprimere l'app di Windows dalla cartella di gestione temporanea eseguendo il cmdlet di PowerShell seguente:

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
    
  4. Firmare l'app di Windows eseguendo il cmdlet di PowerShell seguente:

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