Iniciando aplicativos do Windows com parâmetros

Investigação

Alguns inicializadores de aplicativos do Windows no menu Iniciar exigem o uso de parâmetros a serem passados para o executável ao iniciar o aplicativo do Windows. Para fazer isso, primeiro precisaremos identificar o iniciador que requer o parâmetro antes de integrar o Aplicativo Windows com a Estrutura de Suporte a Pacotes.

Identificando o requisito de parâmetro do inicializador de aplicativos do Windows

  1. Instale seu aplicativo do Windows em uma máquina de teste.

  2. Abra o menu Iniciar do Windows.

  3. Localize e selecione o iniciador de aplicativos do Windows no Menu Iniciar.

  4. Se o aplicativo for iniciado, você não terá problemas (teste todos os inicializadores de aplicativos do Windows associados no Menu Iniciar).

  5. Desinstale o aplicativo do Windows da máquina de teste.

  6. Usando a mídia de instalação do Win32, instale o aplicativo em sua máquina de teste.

  7. Abra o menu Iniciar do Windows.

  8. Localize e clique com o botão direito do mouse em seu aplicativo do Windows no Menu Iniciar.

  9. Selecione Mais>>local do arquivo aberto no menu suspenso.

  10. Clique com o botão direito do mouse no primeiro atalho de aplicativo associado (repita as próximas três etapas para todos os atalhos de aplicativo associados).

  11. Selecione Propriedades no menu suspenso.

  12. Revise o valor na caixa de texto à direita de Destino. Após o caminho do arquivo do aplicativo, se houver um parâmetro listado, este aplicativo Example of the File Property Window with Parameter in Target

  13. Registre o valor do parâmetro para uso futuro.

Resolução

Os aplicativos do Windows redirecionarão diretórios específicos relacionados ao aplicativo para a C:\Program Files\WindowsApps pasta. Se um aplicativo tentar gravar no contêiner de aplicativos do Windows, um erro será disparado e a gravação falhará.

Para resolver o problema relacionado à falha do aplicativo do Windows ao gravar no contêiner de aplicativos do Windows, devemos seguir as quatro etapas a seguir:

  1. Preparar o aplicativo do Windows para um diretório local
  2. Crie o Config.json e injete os arquivos PSF necessários
  3. Atualizar o arquivo AppxManifest do aplicativo do Windows
  4. Reempacotar e assinar o aplicativo do Windows

As etapas acima fornecem orientação por meio da extração do conteúdo do aplicativo do Windows para um diretório de estágio local, injetando os arquivos de correção do PSF no diretório do aplicativo do Windows em estágio, configurando o Iniciador de Aplicativos para apontar para o iniciador do PSF e, em seguida, configurando o arquivo config.json do PSF para redirecionar o iniciador do PSF para o aplicativo que especifica o diretório de trabalho.

Baixe e instale as ferramentas necessárias

Esse processo irá guiá-lo através da recuperação e uso das seguintes ferramentas:

  • Ferramenta Cliente NuGet
  • PSF (estrutura de suporte do pacote)
  • SDK do Windows 10 (versão mais recente)
  • Monitor de processos 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 (não visualizada) da ferramenta de cliente NuGet e salve o nuget.exe na C:\PSF\nuget pasta.

  2. Baixe a Estrutura de Suporte a Pacotes usando o Nuget executando o seguinte em uma janela do PowerShell Administrativo:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. Baixe e instale o Kit de Ferramentas de Desenvolvimento de Software do Windows 10 (Win 10 SDK).

    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:
      • Ferramentas de assinatura do SDK do Windows para aplicativos de área de trabalho
      • SDK do Windows para aplicativos UWP C++
      • SDK do Windwos para localização de aplicativos UWP
    5. Selecione o botão Instalar.
    6. Selecione o botão OK.

Preparar a aplicação Windows

Ao preparar o aplicativo do Windows, estaremos extraindo/desempacotando o conteúdo do aplicativo do Windows em um diretório local. Depois que o aplicativo do Windows for descompactado no local de preparo, os arquivos de correção do PSF poderão ser injetados corrigindo quaisquer experiências indesejadas.

  1. Abra uma janela do PowerShell Administrativo.

  2. Defina as seguintes variáveis direcionadas ao seu arquivo de aplicativo específico e à versão do SDK do 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. Descompacte o aplicativo do 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 do Windows, um arquivo config.json deve ser criado e fornecido com informações sobre o inicializador de aplicativos do Windows que está falhando. Se houver vários inicializadores de aplicativos do Windows com problemas, o arquivo config.json poderá ser atualizado com várias entradas.

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

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

  2. Crie um novo arquivo, selecionando o menu Arquivo na parte superior do VS Code, selecionando Novo arquivo no menu suspenso.

  3. Salve o arquivo como config.json, 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 do 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 o arquivo config.json recém-criado.

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "arguments": ""
            }
        ]
    }
    
  5. Abra o arquivo AppxManifest do aplicativo do Windows em estágios localizado na pasta de preparo do aplicativo do Windows (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml) usando o 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. Defina o applications.idvalor no config.json para ser o mesmo valor encontrado no campo Applications.Application.ID do arquivo AppxManifest.xml . Image circling the location of the ID within the AppxManifest file.

  7. Defina o applications.executablevalor no config.json para direcionar o caminho relativo para o aplicativo localizado no campo Applications.Application.Executable do arquivo AppxManifest.xml . Image circling the location of the executable within the AppxManifest file.

  8. Defina o applications.argumentsvalor no config.json para corresponder ao argumento usado para iniciar o aplicativo. Consulte o valor registrado na etapa final da Orientação de requisitos de parâmetros do inicializador de aplicativos do Windows.

  9. Defina o applications.workingdirectoryvalor no config.json para direcionar o caminho da pasta relativa encontrado no campo Applications.Application.Executable do arquivo AppxManifest.xml . Image circling the location of the working directory within the AppxManifest file.

  10. Salve o arquivo config.json atualizado.

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "arguments": "/bootfromsettingshortcut"
            }
        ]
    }
    
  11. Copie os quatro arquivos a seguir da Estrutura de Suporte a Pacotes com base na arquitetura executável do aplicativo para a raiz do aplicativo do Windows em estágios. Os arquivos a seguir estão localizados no .\Microsoft.PackageSupportFramework.<Versão>\bin.

    Aplicação (x64) Aplicação (x86)
    PSFLauncher64.exe PSFLauncher32.exe
    PSFRuntime64.dll PSFRuntime32.dll
    PSFRunDll64.exe PSFRunDll32.exe

Atualizar AppxManifest

Depois de criar e atualizar o arquivo config.json, o AppxManifest.xmldo aplicativo do Windows deve ser atualizado para cada inicializador de aplicativos do Windows que foi incluído no config.json. Os aplicativos do AppxManifest agora devem ter como destino o PSFLauncher.exe associado à arquitetura de aplicativos.

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

  2. Clique com o botão direito do mouse em AppxManifest.xml e selecione Abrir com código no menu suspenso (opcionalmente, você pode abrir com outro editor de texto).

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

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

Reempacotar o aplicativo

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

  1. Abra uma janela administrativa do PowerShell.

  2. Defina 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$((gcim Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. Reempacote o aplicativo do Windows da pasta de preparo 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 aplicativo do Windows 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