Utilizzare uno script per installare un'app desktop in pacchetti di provisioning

Questa procedura dettagliata descrive come includere script in un pacchetto di provisioning client Windows per installare applicazioni Win32. È anche possibile eseguire operazioni con script diversi dall'installazione di app. Tuttavia, è necessario prestare attenzione per evitare comportamenti imprevisti durante l'esecuzione dello script (vedere le osservazioni seguenti).

Assemblare gli asset dell'applicazione

  1. Nel dispositivo in cui si sta creando il pacchetto, posizionare tutti gli asset in una posizione nota. Ogni asset deve avere un nome file univoco perché tutti i file verranno copiati nella stessa directory temp nel dispositivo. È comune che molte app abbiano un programma di installazione denominato "install.exe" o simile e potrebbe verificarsi una sovrapposizione di nomi per questo motivo. Per risolvere questo problema, è possibile utilizzare la tecnica descritta nel passaggio successivo per includere una struttura di directory completa che viene poi espansa nella directory temp nel dispositivo. L'utilizzo più comune è quello di includere una sottodirectory per ogni applicazione.

  2. Se è necessario includere una struttura di directory di file, è necessario cabare gli asset per facilitarne l'inclusione nei pacchetti di provisioning.

Inserire in un file cab gli asset delle applicazioni

  1. Creare un .DDF file come indicato di seguito, sostituendo file1 e file2 con i file da inserire nel pacchetto e aggiungendo il nome di file/directory.

    ;*** 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. Utilizzare makecab per creare i file cab.

    Makecab -f <path to DDF file>
    

Creare lo script per installare l'applicazione

Creare uno script per eseguire tutte le operazioni necessarie per installare le applicazioni. Gli esempi seguenti vengono forniti per iniziare più facilmente la creazione dello script di orchestrazione che eseguirà i programmi di installazione necessari. In realtà, lo script di orchestrazione può fare riferimento a molti più asset di quanti indicati in questi esempi.

Non è necessario creare uno script dell'agente di orchestrazione. Puoi disporre di una riga di comando per ogni app. Se necessario, puoi creare uno script che registra l'output per ogni app, come indicato di seguito (invece di uno script di orchestrazione per l'intero pacchetto di provisioning).

Nota

Tutte le azioni eseguite dallo script devono essere eseguite in modalità invisibile all'utente, senza visualizzazione di opzioni di interfaccia utente e senza richiedere alcun intervento dell'utente.

Gli script verranno eseguiti nel dispositivo nel contesto di sistema.

Esempio di debug

La registrazione granulare non è incorporata, quindi la registrazione deve essere incorporata nello script stesso. Ecco uno script di esempio che registra "Hello World" in un file di log. Quando viene eseguito nel dispositivo, il file di registro sarà disponibile dopo il completamento del provisioning. Come si vedrà negli esempi seguenti, è consigliabile registrare ogni azione eseguita dallo script.

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

Esempio .exe

Questo script di esempio illustra come creare un file di output del log nell'unità di sistema, installare un'app da un .exe programma di installazione ed eseguire l'eco dei risultati nel file di log.

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

Esempio di file con estensione .msi

Come il programma di installazione precedente, ma l'app viene installata da un programma di installazione MSI. Si noti che msiexec viene chiamato con il flag /quiet per soddisfare il requisito di esecuzione degli script invisibile all'utente dall'interno di un pacchetto di provisioning.

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

Esempio di PowerShell

Questo è uno script di esempio con registrazione che mostra come eseguire uno script di PowerShell dall'impostazione dei comandi di provisioning. Lo script di PowerShell a cui si fa riferimento in questo esempio deve essere incluso anche nel pacchetto e rispettare gli stessi requisiti di tutti gli script eseguiti dall'interno del pacchetto di provisioning: deve essere eseguito in modo invisibile all'utente, senza alcuna interazione dell'utente.

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%

Esempio di estrazione da un file .CAB

Questo script di esempio mostra l'espansione di un .cab dallo script dei comandi di provisioning e l'installazione del setup.exe espanso

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%

Chiamata di più script nel pacchetto

Il pacchetto di provisioning può includere più CommandFiles.

È consentita una riga di comando per ogni pacchetto di provisioning. I file batch illustrati in precedenza sono script di orchestrazione che gestiscono l'installazione e chiamano tutti gli altri script inclusi nel pacchetto di provisioning. Lo script dell'agente di orchestrazione è ciò che deve essere richiamato dalla riga di comando specificata nel pacchetto.

Di seguito è riportata una tabella che descrive questa relazione usando l'esempio di PowerShell riportato sopra:

Impostazione di Progettazione immagine e configurazione di Windows Valore Descrizione
ProvisioningCommands/DeviceContext/CommandLine cmd /c PowerShell_Example.bat La riga di comando necessaria per richiamare lo script di orchestrazione.
ProvisioningCommands/DeviceContext/CommandFiles PowerShell_Example.bat Lo script di orchestrazione singolo a cui fa riferimento la riga di comando che gestisce la chiamata nei programmi di installazione o che esegue qualsiasi altra operazione, ad esempio l'espansione di file cab. Questo script deve eseguire la necessaria registrazione.
ProvisioningCommands/DeviceContext/CommandFiles my_powershell_script.ps1 Altri asset a cui fa riferimento lo script di orchestrazione. In questo esempio ne esiste solo uno, ma in questo caso potrebbero essere presenti molti asset a cui si fa riferimento. Un caso di uso comune è quello di usare l'agente di orchestrazione per chiamare una serie di programmi di installazione install.exe o setup.exe per installare varie applicazioni. Ognuno di questi programmi di installazione deve essere incluso come un asset.

Aggiungere lo script al pacchetto di provisioning

Quando il file batch è scritto e gli asset a cui si fa riferimento sono pronti per l'inclusione, è possibile aggiungerli a un pacchetto di provisioning nella Designer configurazione di Windows.

Utilizzando Progettazione configurazione di Windows, specifica i dettagli completi della modalità di esecuzione dello script nell'impostazione CommandLine nel pacchetto di provisioning. Sono inclusi i flag o tutti gli altri parametri che si digitano in genere nella riga di comando. Pertanto, se ad esempio il pacchetto contiene un programma di installazione di app denominato install.exe e uno script utilizzato per automatizzare l'installazione denominata InstallMyApp.bat, l'impostazione ProvisioningCommands/DeviceContext/CommandLine deve essere configurata per:

cmd /c InstallMyApp.bat

In Progettazione configurazione di Windows, avrà questo aspetto:

Riga di comando in Personalizzazioni selezionate.

È inoltre necessario aggiungere gli asset pertinenti per la riga di comando inclusi lo script di orchestrazione e tutti gli altri asset a cui fa riferimento, ad esempio i programmi di installazione o file .cab.

In Progettazione configurazione di Windows, questa operazione viene effettuata aggiungendo i file nell'impostazione ProvisioningCommands/DeviceContext/CommandFiles.

File di comando in Personalizzazioni selezionate.

Al termine, compilare il pacchetto.

Osservazioni

  1. Tramite ProvisioningCommands non è supportata interazione dell'utente o output della console. Tutte le operazioni devono essere invisibili all'utente. Se lo script tenta di eseguire una delle operazioni seguenti, causa un comportamento non definito e potrebbe mettere il dispositivo in uno stato irreversibile se eseguito durante l'installazione o l'esperienza predefinita:

    1. Eco alla console
    2. Visualizzare qualsiasi elemento sullo schermo
    3. Inviare richieste all'utente con una finestra di dialogo o con l'installazione guidata
  2. Quando applicato al primo avvio, il provisioning viene eseguito all'inizio della sequenza di avvio e prima di stabilire un contesto utente; è necessario prestare attenzione a includere solo i programmi di installazione che è possibile eseguire in questo momento. È possibile eseguire il provisioning di altri programmi di installazione tramite uno strumento di gestione.

  3. Se il dispositivo viene inserito in uno stato irreversibile a causa di uno script non valido, è possibile reimpostarlo usando le opzioni di ripristino nel client Windows.

  4. Gli asset CommandFile vengono distribuiti nel dispositivo in una cartella temporanea univoca per ogni pacchetto.

    1. Per i pacchetti aggiunti durante l'esperienza predefinita, si tratta in genere di %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

      Il 0 valore after Commands\ fa riferimento all'ordine di installazione e indica la prima app da installare. Il numero verrà incrementato per ogni app nel pacchetto.

    2. Per i pacchetti aggiunti facendo doppio clic su un dispositivo già distribuito, questo si troverà nella cartella temporanea per l'utente che esegue il pacchetto di provisioning: %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

  5. La riga di comando verrà eseguita con la directory in cui sono stati distribuiti CommandFiles come directory di lavoro. Ciò significa che non è necessario specificare il percorso completo agli asset nella riga di comando o da qualsiasi script.

  6. Il componente di provisioning di runtime tenterà di eseguire gli script dal pacchetto di provisioning in corrispondenza del punto il prima possibile, a seconda della fase in cui è stato aggiunto il PPKG. Ad esempio, se il pacchetto è stato aggiunto durante la Configurazione guidata, verrà eseguito immediatamente dopo l'applicazione del pacchetto, mentre la Configurazione guidata è ancora in esecuzione. Questo avviene prima che le opzioni di configurazione di account utente vengano visualizzate dall'utente. Verrà visualizzata una finestra di dialogo di avanzamento in rotazione e sullo schermo verrà visualizzato "please wait".

    Nota

    Esiste un timeout di 30 minuti per il processo di provisioning a questo punto. Tutti gli script e le installazioni devono essere completati entro questo intervallo di tempo.

  7. Gli script vengono eseguiti in background, mentre il resto del provisioning continua a essere in esecuzione. Per i pacchetti aggiunti nei sistemi esistenti usando il doppio clic per l'installazione, non è presente alcuna notifica che il provisioning o l'esecuzione dello script è stata completata