Compartilhar via


Executar scripts com o Framework de Suporte a Pacotes

Os scripts permitem que os profissionais de TI personalizem um aplicativo dinamicamente para o ambiente do usuário depois que ele é empacotado usando o MSIX. Por exemplo, você pode usar scripts para configurar seu banco de dados, configurar uma VPN, montar uma unidade compartilhada ou executar uma verificação de licença dinamicamente. Os scripts fornecem muita flexibilidade. Eles podem alterar as chaves do Registro ou executar modificações de arquivo com base na configuração do computador ou do servidor.

Você pode usar o PSF (Package Support Framework) para executar um script do PowerShell antes que um executável de aplicativo empacotado seja executado e um script do PowerShell após a execução do executável do aplicativo para limpar. Cada executável de aplicativo definido no manifesto do aplicativo pode ter seus próprios scripts. Você pode configurar o script para ser executado uma vez apenas na primeira inicialização do aplicativo e sem mostrar a janela do PowerShell para que os usuários não terminem o script prematuramente por engano. Há outras opções para configurar a maneira como os scripts podem ser executados, mostrado abaixo.

Pré-requisitos

Para habilitar a execução de scripts, você precisa definir a política de execução do PowerShell como RemoteSigned. Você pode fazer isso executando este comando:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

A política de execução precisa ser definida para o executável do PowerShell de 64 bits e o executável do PowerShell de 32 bits. Abra cada versão do PowerShell e execute um dos comandos mostrados acima.

Aqui estão os locais de cada executável.

  • Computador de 64 bits:
    • Executável de 64 bits: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • Executável de 32 bits: %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • Computador de 32 bits:
    • Executável de 32 bits: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Para obter mais informações sobre políticas de execução do PowerShell, consulte este artigo.

🚩 Inclua também o arquivo StartingScriptWrapper.ps1 em seu pacote e coloque-o na mesma pasta que o executável. Você pode copiar esse arquivo do pacote PSF NuGet ou do repositório Github do PSF.

Habilitar scripts

Para especificar quais scripts serão executados para cada executável de aplicativo empacotado, você precisa modificar o arquivoconfig.json. Para dizer ao PSF para executar um script antes da execução do aplicativo empacotado, adicione um item de configuração chamado startScript. Para instruir o PSF a executar um script após a conclusão do aplicativo empacotado, adicione um item de configuração chamado endScript.

Itens de configuração de script

Veja a seguir os itens de configuração disponíveis para os scripts. O script final ignora os itens de configuração waitForScriptToFinish e stopOnScriptError.

Nome da chave Tipo de valor Obrigatório? Padrão Descrição
scriptPath cadeia de caracteres Sim Não aplicável O caminho para o script, incluindo o nome e a extensão. O caminho é relativo ao diretório de trabalho do aplicativo, se especificado, caso contrário, ele começa no diretório raiz do pacote.
scriptArguments cadeia de caracteres Não vazio Lista de argumentos delimitados por espaço. O formato é o mesmo para uma chamada de script do PowerShell. Essa string é acrescentada a scriptPath para fazer uma chamada PowerShell.exe válida.
runInVirtualEnvironment booliano Não verdadeiro Especifica se o script deve ser executado no mesmo ambiente virtual em que o aplicativo empacotado é executado.
runOnce booliano Não verdadeiro Especifica se o script deve ser executado uma vez por usuário, por versão.
showWindow booliano Não falso Especifica se a janela do PowerShell é mostrada.
stopOnScriptError booliano Não falso Especifica se o aplicativo será encerrado se o script inicial falhar.
waitForScriptToFinish booliano Não verdadeiro Especifica se o aplicativo empacotado deve aguardar a conclusão do script inicial antes de começar.
timeout DWORD Não INFINITO Por quanto tempo o script terá permissão para ser executado. Quando o tempo passar, o script será interrompido.

Observação

Não há suporte para a configuração stopOnScriptError: true e waitForScriptToFinish: false para o aplicativo de exemplo. Se você definir ambos os itens de configuração, o PSF retornará o erro ERROR_BAD_CONFIGURATION.

Exemplo de configuração

Aqui está uma configuração de exemplo usando dois executáveis de aplicativo diferentes.

{
  "applications": [
    {
      "id": "Sample",
      "executable": "Sample.exe",
      "workingDirectory": "",
      "stopOnScriptError": false,
      "startScript":
      {
        "scriptPath": "RunMePlease.ps1",
        "scriptArguments": "\\\"First argument\\\" secondArgument",
        "runInVirtualEnvironment": true,
        "showWindow": true,
        "waitForScriptToFinish": false
      },
      "endScript":
      {
        "scriptPath": "RunMeAfter.ps1",
        "scriptArguments": "ThisIsMe.txt"
      }
    },
    {
      "id": "CPPSample",
      "executable": "CPPSample.exe",
      "workingDirectory": "",
      "startScript":
      {
        "scriptPath": "CPPStart.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runInVirtualEnvironment": true
      },
      "endScript":
      {
        "scriptPath": "CPPEnd.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runOnce": false
      }
    }
  ],
  "processes": [
    ...(taken out for brevity)
  ]
}