Estrutura de suporte do pacote-correção do diretório de trabalho

Investigação

Windows os aplicativos redirecionarão diretórios específicos relacionados ao aplicativo para a pasta de contêiner do aplicativo Windows. Se um aplicativo criar uma subpasta ( C:\Program Files\Vendor\subfolder ) como parte da instalação e, posteriormente, chamar essa subpasta, ele não encontrará o diretório, pois ele não existe.

usando o PSF (package Support Framework), os aprimoramentos podem ser feitos no pacote do aplicativo Windows para resolver esse problema. Primeiro, devemos identificar a falha e os caminhos de diretório que estão sendo solicitados pelo aplicativo.

capturar a falha do aplicativo Windows

Filtrar os resultados é uma etapa opcional, que facilitará a exibição de falhas relacionadas ao aplicativo. Para fazer isso, criaremos duas regras de filtro. O primeiro filtro de inclusão para o nome do processo do aplicativo e o segundo é uma inclusão de todos os resultados que não forem bem-sucedidos.

  1. Baixe e extraia o Monitor de processos do Sysinternals para o diretório C:\PSF\ProcessMonitor
  2. abra o Windows Explorer e navegue até a pasta do Monitor de processo do SysInternals extraído
  3. Clique duas vezes no arquivo do monitor de processo do SysInternals (procmon.exe), iniciando o aplicativo.
  4. Se solicitado pelo UAC, selecione o botão Sim .
  5. Na janela filtro do Process Monitor, selecione o primeiro menu suspenso rotulado com arquitetura.
  6. Selecione nome do processo no menu suspenso.
  7. No próximo menu suspenso, verifique se ele está definido com o valor de é.
  8. No campo de texto, digite o nome do processo do seu aplicativo (exemplo: PSFSample.exe). exemplo do filtro do Monitor de processos Windows com o nome do aplicativo
  9. Selecione o botão Adicionar.
  10. Na janela filtro do monitor de processos, selecione o primeiro menu suspenso rotulado como nome do processo.
  11. Selecione resultado no menu suspenso.
  12. No menu suspenso seguinte, selecione-o e selecione não está no menu suspenso.
  13. No campo de texto tipo: êxito. exemplo do filtro do Monitor de processos Windows com o resultado
  14. Selecione o botão Adicionar.
  15. Selecione o botão OK .
  16. inicie o aplicativo Windows, dispare o erro e feche o aplicativo Windows.

examinar os Logs de falha do aplicativo Windows

depois de capturar os processos de aplicativo Windows, os resultados precisarão ser investigados para identificar se a falha está relacionada ao diretório de trabalho.

  1. Examine os resultados do monitor de processos do SysInternals, procurando falhas descritas na tabela acima.
  2. Se os resultados mostrarem um resultado de "nome não encontrado" , com os detalhes "acesso desejado:..." para seu aplicativo específico direcionado a um diretório fora do "c:\Arquivos de Files\WindowsApps \ ... \ " (como visto na imagem abaixo), você identificou com êxito uma falha relacionada ao diretório de trabalho, use o artigo suporte do PSF-sistema de arquivos para obter orientação sobre como aplicar a correção do PSF ao seu aplicativo. Exibe a mensagem de erro testemunhada no monitor de processo do SysInternals para falha ao gravar no diretório.

Resolução

Windows os aplicativos redirecionarão diretórios específicos relacionados ao aplicativo para a pasta de contêiner do aplicativo Windows. Se um aplicativo criar uma subpasta ( C:\Program Files\Vendor\subfolder ) como parte da instalação e, posteriormente, chamar essa subpasta, ele não encontrará o diretório, pois ele não existe.

para resolver o problema relacionado ao aplicativo Windows que faz referência a um diretório de trabalho incorreto, devemos seguir as quatro etapas a seguir:

  1. preparar o aplicativo Windows para um diretório local
  2. Criar o Config.jse injetar os arquivos PSF necessários
  3. atualizar o arquivo de AppxManifest do aplicativo de Windows
  4. reempacotar e assinar o aplicativo Windows

as etapas acima fornecem orientação por meio da extração do conteúdo do aplicativo Windows para um diretório de preparo local, injetando os arquivos de correção PSF no diretório de aplicativo de Windows preparado, configurando o iniciador do aplicativo para apontar para o inicializador do PSF e, em seguida, configurar o PSF config.jsno arquivo para redirecionar o iniciador PSF para o aplicativo que especifica o diretório de

Baixar e instalar as ferramentas necessárias

Esse processo orientará você durante a recuperação de e o uso das seguintes ferramentas:

  • NuGet Ferramenta de cliente
  • PSF (estrutura de suporte do pacote)
  • Windows 10 SDK (versão mais recente)
  • Monitor de processos da SysInternals

O seguinte fornecerá orientações passo a passo sobre como baixar e instalar as ferramentas necessárias.

  1. baixe a versão mais recente (sem visualização) da ferramenta de cliente NuGete salve o nuget.exe na C:\PSF\nuget pasta.

  2. Baixe a estrutura de suporte do pacote usando o NuGet executando o seguinte em uma janela administrativa do PowerShell:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. baixe e instale o Toolkit de desenvolvimento de Software Windows 10 (SDK do Win 10).

    1. Baixe o SDK do Win 10.
    2. Execute o winsdksetup.exe que foi baixado na etapa anterior.
    3. Selecione o botão Avançar.
    4. Selecione apenas os três recursos a seguir para instalação:
      • Windows Ferramentas de assinatura do SDK para aplicativos da área de trabalho
      • Windows SDK para aplicativos UWP C++
      • DoWindows SDK para localização de aplicativos UWP
    5. Selecione o botão Instalar.
    6. Selecione o botão OK .

preparar o aplicativo Windows

ao preparar o aplicativo Windows, iremos extrair/desempacotar o conteúdo do aplicativo Windows para um diretório local. depois que o aplicativo Windows foi desempacotado no local de preparo, os arquivos de correção PSF podem ser injetados corrigindo quaisquer experiências indesejadas.

  1. Abra uma janela administrativa do PowerShell.

  2. defina as seguintes variáveis direcionando seu arquivo de aplicativo específico e Windows 10 versão do 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. descompacte o aplicativo Windows para a pasta de preparo executando o seguinte cmdlet do 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"
    

Criar e injetar arquivos PSF necessários

para aplicar ações corretivas ao aplicativo Windows, é necessário criar uma config.jsno arquivo e fornecer informações sobre o iniciador do aplicativo Windows que está falhando. se houver vários iniciadores de aplicativo Windows que estão enfrentando problemas, o config.jsno arquivo poderá ser atualizado com várias entradas.

depois de atualizar o config.jsno arquivo, o config.jsno arquivo e o suporte aos arquivos de correção PSF devem ser movidos para a raiz do pacote do aplicativo Windows.

  1. abra Visual Studio Code (VS Code) ou qualquer outro editor de texto.

  2. crie um novo arquivo, selecionando o menu arquivo na parte superior da VS Code, selecionando novo arquivo no menu suspenso.

  3. salve o arquivo como config.jsem, selecionando o menu arquivo na parte superior da janela VS Code, selecionando salvar no menu suspenso. na janela salvar como, navegue até o diretório de preparo do aplicativo Windows (C:\PSF\Staging\PSFSampleApp) e defina o nome do arquivo como config.json . Selecione o botão Salvar.

  4. Copie o código a seguir para a config.jsrecém-criada no arquivo.

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "workingDirectory": ""
            }
        ],
        "processes": [
            {
                "executable": ""
            }
        ]
    }
    
  5. abra o arquivo AppxManifest do aplicativo em Windows etapas localizado na pasta de preparo do aplicativo Windows (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml) usando VS Code ou outro editor de texto.

    <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. Copie o valor no campo ID localizado no arquivo AppxManifest.xml localizado em Package.Applications.Application para o campo ID de aplicativos no config.js arquivo. Imagem destacando o local da ID no arquivo AppxManifest.

  7. Copie o caminho relativo do pacote do campo executável localizado no arquivo AppxManifest.xml localizado em Package.Applications.Application para o campo executável de aplicativos na config.jsno arquivo. Imagem destacando o local do executável no arquivo AppxManifest.

  8. Copie o caminho pai relativo do pacote do campo executável localizado no arquivo AppxManifest.xml localizado em Package.Applications.Application para o campo aplicativos WorkingDirectory no config.jsno arquivo. Imagem destacando o local do diretório de trabalho dentro do arquivo AppxManifest.

  9. Copie o nome do executável do campo executável localizado no arquivo de AppxManifest.xml localizado em Package.Applications.Application para o campo executável de processos no config.jsno arquivo. Imagem destacando o local do executável do processo dentro do arquivo AppxManifest.

  10. Salve o config.jsatualizado no arquivo.

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "workingDirectory": "VFS/ProgramFilesX64/PS Sample App/"
            }
        ],
        "processes": [
            {
            "executable": "PSFSample"
            }
        ]
    }
    
  11. copie os três arquivos a seguir da estrutura de suporte do pacote com base na arquitetura executável do aplicativo para a raiz do aplicativo de Windows preparado. Os seguintes arquivos estão localizados dentro do .\Microsoft.PackageSupportFramework. \bin.

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

Atualizar AppxManifest

Depois de criar e atualizar o arquivoconfig.json, oAppxManifest.xmldo aplicativo Windows deve ser atualizado para cada Launcher de Aplicativo do Windows que foi incluído no config.jsno. Os aplicativos do AppxManifest agora devem ser destinados aoPSFLauncher.exe associado à arquitetura de aplicativos.

  1. Abra Explorador de Arquivos e navegue até a pasta Aplicativo MSIX em Fases (C:\PSF\Staging\PSFSampleApp).

  2. Clique com o botão direitoAppxManifest.xml e selecione Abrir com Código no menu suspenso (opcionalmente, você pode abrir com outro editor de texto).

  3. Atualize o AppxManifest.xml com as seguintes informações:

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

Empacote o aplicativo de novo

Todas as correções foram aplicadas, agora o aplicativo Windows pode ser empacotado em um MSIX e assinado usando um certificado de assinatura de código.

  1. Abra uma janela administrativa do PowerShell.

  2. De acordo com as seguintes variáveis:

    $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. Empacote o Windows aplicativo da pasta de preparação executando o seguinte cmdlet do PowerShell:

    Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture"
    .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
    
  4. Assine o Windows aplicativo executando o seguinte cmdlet do PowerShell:

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