Iniciando Windows aplicativo com parâmetros

Investigação

Alguns inicializadores de aplicativos Windows no menu iniciar exigem que o uso de parâmetros seja passado para o executável ao iniciar o aplicativo Windows. Para fazer isso, primeiro precisaremos identificar o inicializador que exige o parâmetro antes de integrar o aplicativo Windows ao Package Support Framework.

Identificando Windows requisito de parâmetro do inicializador de aplicativos

  1. Instale seu aplicativo Windows em um computador de teste.

  2. Abra o menu Iniciar Windows.

  3. Localize e selecione seu inicializador de aplicativos Windows no Menu Iniciar.

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

  5. Desinstale o aplicativo Windows do computador de teste.

  6. Usando a mídia de instalação do Win32, instale o aplicativo no computador de teste.

  7. Abra o menu Iniciar Windows.

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

  9. Selecione o Local do Arquivo MoreOpen>> 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. Examine o valor na caixa de texto à direita de Destino. Após o caminho do arquivo de 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

Windows Apps redirecionará diretórios específicos relacionados ao aplicativo para a pasta de contêiner do aplicativo Windows. Se um aplicativo tentar gravar no contêiner Windows Aplicativo, um erro será disparado e a gravação falhará.

Para resolver o problema relacionado ao Windows App não gravar no contêiner Windows App, devemos seguir as quatro etapas a seguir:

  1. Preparar o aplicativo Windows para um diretório local
  2. Criar o Config.json e injetar arquivos PSF necessários
  3. Atualizar o arquivo appxManifest 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 local em etapas, injetando os arquivos de correção PSF no diretório do aplicativo Windows em etapas, configurando o Inicializador de Aplicativos para apontar para o inicializador PSF e configurando o arquivo PSF config.json para redirecionar o inicializador PSF para o aplicativo que especifica o diretório de trabalho.

Baixar e instalar ferramentas necessárias

Esse processo orientará você na recuperação e no uso das seguintes ferramentas:

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

A seguir, fornecerá orientações passo a passo sobre como baixar e instalar as ferramentas necessárias.

  1. Baixe a versão mais recente (não prévia) da ferramenta de cliente NuGet e salve o nuget.exe na C:\PSF\nuget pasta.

  2. Baixe o Package Support Framework 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 Windows 10 Toolkit de Desenvolvimento de Software (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:
      • ferramentas de assinatura do SDK do Windows para aplicativos da área de trabalho
      • Windows SDK para aplicativos C++ UWP
      • SDK do Windwos 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, extrairemos/desempacotaremos o conteúdo do aplicativo Windows para um diretório local. Depois que o aplicativo Windows tiver sido descompactado no local de preparo, os arquivos de correção PSF poderão ser injetados corrigindo quaisquer experiências indesejadas.

  1. Abra uma janela administrativa do PowerShell.

  2. Defina as seguintes variáveis direcionadas ao 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$((gcim Win32_Processor).AddressWidth)"    ## Operating System Architecture
    $Win10SDKVersion  = "10.0.19041.0"                               ## Latest version of the Win10 SDK
    
  3. Desempacotar 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, o arquivo config.json deve ser criado e fornecido com informações sobre o inicializador de aplicativos Windows que está falhando. Se houver vários inicializadores de aplicativos Windows que estão enfrentando 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 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 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 Windows App Staging (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 Windows App AppxManifest em 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. Defina o applications.id valor em config.json como 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.executable valor 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.arguments valor no config.json para corresponder ao argumento usado para iniciar o aplicativo. Consulte o valor registrado na etapa final da investigação – identificando Windows diretrizes de requisito de parâmetro do inicializador de aplicativos.

  9. Defina o applications.workingdirectory valor no config.json para direcionar o caminho relativo da pasta 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 do Package Support Framework com base na arquitetura executável do aplicativo para a raiz do aplicativo de Windows em etapas. Os arquivos a seguir estão localizados no .\Microsoft.PackageSupportFramework.< Version>\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 arquivo config.json, a AppxManifest.xml do aplicativo Windows deve ser atualizada para cada inicializador de aplicativos Windows incluído no config.json. Os Aplicativos do AppxManifest agora devem ter como destino o PSFLauncher.exe associado à arquitetura de aplicativos.

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

  2. Clique com o botão direito do mouse emAppxManifest.xmle 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>
    

Empacotar novamente o aplicativo

Todas as correções foram aplicadas, agora o aplicativo Windows pode ser empacotado novamente 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 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 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