Durante la build conference, oltre a sessioni entusiasmanti come quella di Matt, ho avuto modo di farmi spiegare molti dettagli interessanti su WinRT. Grazie quindi agli speaker e altri membri del team per la loro disponibilità alle numerosissime domande di tutti i presenti. Questa è una lavagna emblematica:
Per quanto mi riguarda, è stato illuminante il paragone con COM e il nuovo meccanismo di attivazione che ripercorrerò rapidamente in questi post.
Dopo aver creato una applicazione Metro, Visual Studio 11 permette di generare il file del package che è la nuova unità di deploy per le applicazioni Metro-Style.
Visual Studio permette di creare un package tramite il menu "Project – Store – Create App Package". A seguito di questo comando il wizard esegue una serie di operazioni:
- embedding di manifest, metadati, risorse e altri eventuali file necessari al progetto (dll, etc.)
- generazione del package (un file zip)
- firma del package con un certificato
Il package generato costituisce l'unità di deploy e non ha altre dipendenze, fatta eccezione per il Framework.NET (solo se viene utilizzato un linguaggio managed) oppure i file VC++ runtime (solo se si utilizza C++). La nuova applicazione avrà comunque la necessità di WinRT che è/sarà disponibile solo su Windows 8.
Il package di fatto elimina la necessità di creare un package MSI ma l'installer msiexec è tutt'altro che morto visto che è proprio lui ad eseguire la registrazione del certificato, installare il package e registrare l'applicazione nel registry.
L'installazione può essere fatta ad opera di Visual Studio (anche senza creare il package prima), del Windows Store (quando sarà disponibile) oppure di un batch generato da Visual Studio e che utilizza powershell. Questo batch necessita dei diritti di amministratore per poter installare il certificato self-signed, cosa che non avviene nel caso di installazione dallo Store/Marketplace di Windows.
Il package viene registrato nel sistema nella porzione di registry dell'utente corrente (HKCU) e questo significa che un utente è in grado di installare applicazioni Metro senza necessità di diritti amministrativi.
All'interno del package ci sono le eventuali dll che definiscono "componenti WinRT" (classi WinRT che espongono type che fanno parte del type system WinRT) o "controlli WinRT" (come i componenti WinRT ma che definiscono un nuovo controllo Xaml). Questi sono sempre privati e di conseguenza:
- non necessitano di registrazione globale come avveniva in COM o GAC per il Framework.NET
- non essendo globale, non esiste il problema del versioning. Ogni applicazione può utilizzare versioni differenti dello stesso componente WinRT
Per gestire i package delle applicazioni Metro ci sono dei cmdlets dedicati, ben riassunti qui, che vado ad elencare:
- Powershell in un prompt dei comandi per entrare in modalità Powershell ed "exit" per ritornare al prompt dei comandi.
- get-help appx restituisce la lista dei cmdlet specifici dei package
- get-appxpackage restituisce la lista dei package installati nel sistema
- add-appxpackage file.appx installa un package nel sistema
- remove-appxpackage packagefullname rimuove il package (specificare il nome del package ottenuto con get-appxpackage)
Fare riferimento al link sopra citato per alcuni comodi trucchi specifici di powershell.
Nel prossimo post vedremo i passi essenziali della registrazione del package.