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

Si applica a

  • Windows 10
  • Windows 10 Mobile

Questa procedura dettagliata descrive come sfruttare la possibilità di includere script in un pacchetto di provisioning di Windows 10 per installare le applicazioni Win32. È anche possibile eseguire operazioni controllate da script diverse dall'installazione di app; tuttavia, è necessario prestare attenzione per evitare comportamenti non voluti durante l'esecuzione dello script (vedi Osservazioni di seguito).

Prerequisiti: Windows Assessment and Deployment Kit (ADK) per Windows 10, versione 1511 o successiva

Nota

Questo scenario è supportato solo per l'installazione di applicazioni in Windows 10 per desktop, versione 1511 o successiva.

Assemblare gli asset dell'applicazione

  1. Nel dispositivo in cui si sta creando il pacchetto, inserire 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 per molte app avere un programma di installazione denominato 'install.exe' o simile e per questo motivo si potrebbe verificare la sovrapposizione dei nomi. 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, sarà necessario inserire gli asset in un file cab per includerli con facilità nei pacchetti di provisioning.

Inserire in un file cab gli asset delle applicazioni

  1. Creare un file .DDF come indicato qui di seguito, sostituendo file1 e file2 con i file che si desidera inserire nel pacchetto e aggiungendo il nome del 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

In Windows 10, versione 1607 e versioni precedenti, creare uno script per eseguire 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.

In Windows 10, versione 1703, non devi creare uno script 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, pertanto deve essere incorporata nello script stesso. Ecco un esempio di script che registra 'Hello World' di un file di registro. Quando viene eseguito nel dispositivo, il file di registro sarà disponibile dopo il completamento del provisioning. Come è possibile osservare negli esempi seguenti, si consiglia di registrare ogni azione eseguita dallo script.

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

Esempio .exe

Questo script di esempio mostra come creare un file di output di registro nell'unità di sistema e installare un'app da un programma di installazione .exe e visualizzare i risultati nel file di registro.

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

Si tratta di uno script di esempio con la registrazione che illustra come eseguire uno script powershell dall'impostazione dei comandi di provisioning. Si noti che lo script PowerShell a cui fa riferimento questo esempio deve anche essere incluso nel pacchetto e rispettare gli stessi requisiti di tutti gli script eseguiti dall'interno del pacchetto di provisioning: l'esecuzione deve essere 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 file .cab dallo script di comandi di provisioning, nonché l'installazione di 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

In Windows 10, versione 1703, il pacchetto di provisioning può includere più CommandLines.

In Windows 10, versione 1607 e versioni precedenti, è consentita una CommandLine 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 di orchestrazione è quello da richiamare mediante CommandLine specificata nel pacchetto.

Di seguito è riportata una tabella che descrive la relazione, utilizzando il precedente esempio di PowerShell:

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 è presente un solo asset, ma potrebbero esserci molti asset a cui fare 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 uno script al pacchetto di provisioning (Windows 10, versione 1607)

Dopo aver scritto il file batch e con gli asset di riferimento pronti per l'inclusione, puoi aggiungerli a un pacchetto di provisioning in Progettazione 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 Personalizzazioni selezionate

Al termine, creare 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 seguenti operazioni, causerà un comportamento indefinito e il dispositivo potrebbe andare in uno stato irreversibile se l'operazione viene eseguita durante l'installazione o durante la Configurazione guidata: a. Echo alla console b. Visualizzare un elemento sullo schermo c. 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 va in uno stato irreversibile a causa di uno script non valido, è possibile ripristinarlo tramite le opzioni di ripristino in Windows 10.
  4. Gli asset CommandFile vengono distribuiti nel dispositivo in una cartella temporanea univoca per ogni pacchetto.
    • Per Windows 10, versione 1607 e versioni precedenti: a. Per i pacchetti aggiunti durante la Configurazione guidata, si trova in genere in %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands b. Per i pacchetti aggiunti facendo doppio clic su un dispositivo già distribuito, sarà nella cartella temporanea dell'utente che esegue il PPKG: %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands
    • Per Windows 10, versione 1703: a. Per i pacchetti aggiunti durante la configurazione guidata, si trova in genere in %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0 0 dopo Commands\ fa riferimento all'ordine di installazione e indica la prima app da installare. Il numero verrà incrementato per ogni app nel pacchetto. b. Per i pacchetti aggiunti facendo doppio clic su un dispositivo già distribuito, sarà nella cartella temporanea dell'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 e sullo schermo verrà visualizzato il messaggio "Attendere".

    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 utilizzando il doppio clic per l'installazione, non si riceve alcuna notifica di completamento dell'esecuzione degli script o del provisioning

Argomenti correlati