Usar um script para instalar um app da área de trabalho em pacotes de provisionamento

Estas instruções descrevem como incluir scripts num pacote de aprovisionamento de cliente Windows para instalar aplicações Win32. As operações com scripts que não a instalação de aplicações também podem ser executadas. No entanto, é necessário algum cuidado para evitar comportamentos não intencionais durante a execução do script (veja Observações abaixo).

Montar os ativos do aplicativo

  1. No dispositivo onde está a criar o pacote, coloque todos os seus recursos numa localização conhecida. Cada ativo deve ter um nome de arquivo exclusivo, porque todos os arquivos serão copiados para o mesmo diretório temporário no dispositivo. É comum que muitas aplicações tenham um instalador chamado "install.exe" ou semelhante, e pode haver sobreposição de nomes por causa disso. Para corrigir isso, é possível usar a técnica descrita na próxima etapa para incluir uma estrutura de diretório completa, expandida para o diretório temporário no dispositivo. O uso mais comum para isso seria incluir um subdiretório para cada aplicativo.

  2. Se precisar de incluir uma estrutura de diretório de ficheiros, terá de transferir os recursos para uma inclusão fácil nos pacotes de aprovisionamento.

Arquivar os ativos de aplicativo

  1. Crie um .DDF ficheiro como abaixo, substituindo file1 e file2 pelos ficheiros que pretende empacotar e adicionando o nome do ficheiro/diretório.

    ;*** MSDN Sample Source Code MakeCAB Directive file example
    ;
    .OPTION EXPLICIT  ; Generate errors on variable typos
    .set DiskDirectoryTemplate=CDROM  ; All cabinets go in a single directory
    .Set MaxDiskFileCount=1000; Limit file count per cabinet, so that
    ; scanning is not too slow
    .Set FolderSizeThreshold=200000   ; Aim for ~200K per folder
    .Set CompressionType=MSZIP
    ;** All files are compressed in cabinet files
    .Set Cabinet=on
    .Set Compress=on
    ;-------------------------------------------------------------------
    ;** CabinetNameTemplate = name of cab
    ;** DiskDirectory1 = output directory where cab will be created
    ;-------------------------------------------------------------------
    .Set CabinetNameTemplate=tt.cab
    .Set DiskDirectory1=.
    ;-------------------------------------------------------------------
    ; Replace <file> with actual files you want to package
    ;-------------------------------------------------------------------
    <file1>
    <file2>
    ;*** <the end>
    
  2. Use makecab para criar os arquivos cab.

    Makecab -f <path to DDF file>
    

Criar o script para instalar o aplicativo

Crie um script para realizar o trabalho que for necessário para instalar os aplicativos. Os exemplos a seguir são apresentados para ajudar você a começar a criar o script do orchestrator que executará os instaladores necessários. Na prática, o script do orchestrator pode fazer referência a muito mais ativos do que nestes exemplos.

Não precisa de criar um script de orquestrador. Você pode ter apenas uma linha de comando por aplicativo. Se necessário, você pode criar um script que registra a saída por aplicativo, como mencionado abaixo (em vez de um script do orchestrator para todo o pacote de provisionamento).

Observação

  • Todas as ações realizadas pelo script devem acontecer silenciosamente, não mostrando interface do usuário e não exigindo interação do usuário.
  • Os scripts serão executados no dispositivo no contexto do sistema.

Exemplo de depuração

O registo granular não está incorporado, pelo que o registo tem de ser incorporado no próprio script. Eis um script de exemplo que regista Hello World um ficheiro de registo. Quando executado no dispositivo, o arquivo de log estará disponível depois que o provisionamento for concluído. Como verá nos exemplos seguintes, recomenda-se que registe cada ação que o script executa.

set LOGFILE=%SystemDrive%\HelloWorld.log
echo Hello, World >> %LOGFILE%

Exemplo de .exe

Este script de exemplo mostra como criar um ficheiro de saída de registo na unidade do sistema, instalar uma aplicação a partir de um .exe instalador e ecoar os resultados para o ficheiro de registo.

set LOGFILE=%SystemDrive%\Fiddler_install.log
echo Installing Fiddler.exe >> %LOGFILE%
fiddler4setup.exe /S >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Exemplo de .msi

Este é o mesmo instalador anterior, mas instala o aplicativo usando um instalador MSI. Observe que msiexec é chamado com o sinalizador /quiet para atender à exigência silenciosa de scripts executados dentro de um pacote de provisionamento.

set LOGFILE=%SystemDrive%\IPOverUsb_install.log
echo Installing IpOverUsbInstaller.msi >> %LOGFILE%
msiexec /i IpOverUsbInstaller.msi /quiet >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Exemplo do PowerShell

Este é um script de exemplo com registo que mostra como executar um script do PowerShell a partir da definição de comandos de aprovisionamento. O script do PowerShell referenciado a partir deste exemplo também tem de ser incluído no pacote e cumprir os mesmos requisitos que todos os scripts executados a partir do pacote de aprovisionamento: tem de ser executado silenciosamente, sem interação do utilizador.

set LOGFILE=%SystemDrive%\my_powershell_script.log
echo Running my_powershell_script.ps1 in system context >> %LOGFILE%
echo Executing "PsExec.exe -accepteula -i -s cmd.exe /c powershell.exe my_powershell_script.ps1" >> %LOGFILE%
PsExec.exe -accepteula -i -s cmd.exe /c 'powershell.exe my_powershell_script.ps1' >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Exemplo de extração de um .CAB

Este script de exemplo mostra a expansão de uma .cab a partir do script de comandos de aprovisionamento e a instalação do setup.exe expandido

set LOGFILE=%SystemDrive%\install_my_app.log
echo Expanding installer_assets.cab >> %LOGFILE%
expand -r installer_assets.cab -F:* . >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%
echo Installing MyApp >> %LOGFILE%
setup.exe >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Chamada de vários scripts no pacote

O pacote de aprovisionamento pode incluir vários CommandFiles.

É-lhe permitida uma Linha de Comandos por pacote de aprovisionamento. Os arquivos de lote mostrados acima são scripts do orchestrator que gerenciam a instalação e chamam outros scripts incluídos no pacote de provisionamento. O script do orquestrador é o que deve ser invocado a partir da Linha de Comandos especificada no pacote.

Eis uma tabela que descreve esta relação com o exemplo do PowerShell acima:

Configuração do ICD Valor Descrição
ProvisioningCommands/DeviceContext/CommandLine cmd /c PowerShell_Example.bat A linha de comando necessária para chamar o script do orchestrator.
ProvisioningCommands/DeviceContext/CommandFiles PowerShell_Example.bat O único script do orchestrator referenciado pela linha de comando que manipula a chamada para os instaladores necessários ou a realização de outras ações como expandir arquivos cab. Este script deve fazer o registro em log necessário.
ProvisioningCommands/DeviceContext/CommandFiles my_powershell_script.ps1 Outros ativos referenciados pelo script do orchestrator. Neste exemplo, existe apenas um, mas podem existir muitos recursos referenciados aqui. Um caso de uso comum é usar o orchestrator para chamar uma série de instaladores install.exe ou setup.exe para instalar vários aplicativos. Cada um desses instaladores deve ser incluído como um ativo aqui.

Adicionar script ao pacote de provisionamento

Quando tiver o ficheiro batch escrito e os recursos referenciados prontos a incluir, pode adicioná-los a um pacote de aprovisionamento no Windows Configuration Designer.

Usando o Designer de Configuração do Windows, especifique os detalhes completos de como o script deve ser executado na configuração CommandLine no pacote de provisionamento. Isso inclui sinalizadores ou outros parâmetros que você normalmente digitaria na linha de comando. Assim, por exemplo se o pacote contiver um instalador de aplicativo chamado install.exe e um script usado para automatizar a instalação chamado InstallMyApp.bat, a configuração ProvisioningCommands/DeviceContext/CommandLine deverá ser definida como:

cmd /c InstallMyApp.bat

No Designer de Configuração do Windows, isso parece:

Linha de comandos em Personalizações selecionadas.

Você também precisa adicionar os ativos relevantes para essa linha de comando, inclusive o script do orchestrator e todos os outros ativos a que ele faz referência como instaladores ou arquivos .cab.

No Designer de Configuração do Windows, isso é feito adicionando arquivos sob a configuração ProvisioningCommands/DeviceContext/CommandFiles.

Ficheiros de comando em Personalizações selecionadas.

Quando terminar, crie o pacote.

Comentários

  1. Nenhuma interação do usuário ou saída do console é compatível por meio de ProvisioningCommands. Todo trabalho precisa ser silencioso. Se o script tentar efetuar qualquer um dos seguintes procedimentos, causa um comportamento indefinido e pode colocar o dispositivo num estado irrecuperável se for executado durante a configuração ou a Experiência De Configuração Inicial:

    1. Eco para a consola
    2. Apresentar qualquer conteúdo no ecrã
    3. Solicitar ao usuário uma caixa de diálogo ou um assistente de instalação
  2. Quando aplicado na primeira inicialização, o provisionamento é executado no começo da sequência de inicialização e antes de um contexto do usuário ser estabelecido; é preciso ter cuidado para incluir apenas instaladores que possam ser executados neste momento. Outros instaladores podem ser provisionados por meio de uma ferramenta de gerenciamento.

  3. Se o dispositivo estiver num estado irrecuperável devido a um script incorreto, pode repô-lo através das opções de recuperação no cliente Windows.

  4. Os ativos de CommandFile são implantados no dispositivo em uma pasta temporária exclusiva para cada pacote.

    1. Para pacotes adicionados durante a experiência de configuração inicial, este é geralmente em %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

      O 0 seguinte Commands\ refere-se à ordem de instalação e indica a primeira aplicação a ser instalada. O número incrementará para cada aplicativo no pacote.

    2. Para pacotes adicionados ao fazer duplo clique num dispositivo já implementado, este estará na pasta temporária para o utilizador que executa o pacote de aprovisionamento: %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

  5. A linha de comando será executada com o diretório no qual CommandFiles foram implantados como o diretório de trabalho. Isso significa que você não precisa especificar o caminho completo para ativos na linha de comando ou dentro de qualquer script.

  6. O componente de provisionamento de tempo de execução tentará executar os scripts do pacote de provisionamento no ponto mais inicial possível, dependendo do estágio quando o PPKG foi adicionado. Por exemplo, se foi adicionado durante a tela de apresentação, o pacote será executado imediatamente depois que for aplicado, enquanto a tela de apresentação ainda estiver em andamento. Isso ocorre antes das opções de configuração da conta de usuário serem apresentadas ao usuário. Será apresentada uma caixa de diálogo de progresso a girar e será apresentada a mensagem "Aguarde" no ecrã.

    Observação

    Há um tempo limite de 30 minutos para o processo de provisionamento neste ponto. Todos os scripts e instalações precisam ser concluídos dentro desse período.

  7. Os scripts são executados em segundo plano à medida que o restante do provisionamento continua sendo executado. Para pacotes adicionados em sistemas existentes com o duplo clique para instalar, não há nenhuma notificação de que o aprovisionamento ou a execução do script foram concluídos

Próximas etapas

Saiba mais sobre como aplicar um pacote de aprovisionamento:

Aplicar um pacote do provisionamento