Executar scripts com o Package Support Framework

Os scripts permitem que os profissionais de TI personalizem um aplicativo dinamicamente para o ambiente do usuário depois que ele é empacotado usando 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 da máquina 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 depois que o executável do aplicativo for executado para limpeza. Cada executável de aplicativo definido no manifesto do aplicativo pode ter seus próprios scripts. Você pode configurar o script para ser executado apenas uma vez 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, mostradas abaixo.

Pré-requisitos

Para permitir 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. Certifique-se de abrir cada versão do PowerShell e executar 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.

🚩 Certifique-se também de incluir o arquivo StartingScriptWrapper.ps1 no pacote e colocá-lo na mesma pasta que o executável. Você pode copiar esse arquivo do pacote PSF NuGet ou do repositório PSF Github.

Habilitar scripts

Para especificar quais scripts serão executados para cada executável de aplicativo empacotado, você precisa modificar o arquivo config.json. Para instruir o PSF a executar um script antes da execução do aplicativo empacotado, adicione um item de configuração chamado startScript. Para dizer ao PSF para 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

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

Nome da chave Tipo de Valor Obrigatório? Padrão Descrição
scriptPath string Sim N/D 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 string Não empty Lista de argumentos delimitada por espaço. O formato é o mesmo para uma chamada de script do PowerShell. Essa cadeia de caracteres é anexada para scriptPath fazer uma chamada válida.exe PowerShell.
runInVirtualEnvironment boolean Não true Especifica se o script deve ser executado no mesmo ambiente virtual em que o aplicativo empacotado é executado.
runOnce boolean Não true Especifica se o script deve ser executado uma vez por usuário, por versão.
showWindow boolean Não false Especifica se a janela do PowerShell é mostrada.
stopOnScriptError boolean Não false Especifica se o aplicativo deve sair do aplicativo se o script inicial falhar.
waitForScriptToFinish boolean Não true Especifica se o aplicativo empacotado deve aguardar a conclusão do script inicial antes de iniciar.
timeout DWORD Não INFINITE Por quanto tempo o script poderá 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 esses dois itens de configuração, o PSF retornará a ERROR_BAD_CONFIGURATION de erro.

Exemplo de configuração

Aqui está um exemplo de configuração 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)
  ]
}