posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

Essential WinRT parte 1: Il package

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:

2011-09-16 11.47.50

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.

Print | posted on giovedì 13 ottobre 2011 17:18 |

Feedback

Gravatar

# re: Essential WinRT parte 1: Il package

@Pino. La registrazione di una applicazione avviene in HKCU quindi tocca la parte del profilo utente.
I problemi di registry che conosciamo derivano dal fatto che un componente COM veniva registrato in modo *condiviso* affinché tutte le applicazioni potessero usufruirne. Infatti la registrazione con regsvr32 registrava interfacce e componenti in HKLM.
Il motivo dei "residui" nel registry è dovuto al fatto che la deregistrazione di un componente avrebbe potuto rendere inutilizzabili le applicazioni che ne facevano uso.
Con WinRT tutti i componenti sono privati perciò la disinstallazione è semplice e definitiva.

@Nick. Grazie a te e alla prox :)
14/10/2011 01:56 | Raffaele Rialdi
Gravatar

# re: Essential WinRT parte 1: Il package

@Fabio. L'installazione diretta viene fatta da VS11 per ovvi motivi di debugging.
A parte l'installazione del certificato che richiede di essere admin, l'installazione dell'appx richiede solo un utente normale. Questo è possibile grazie al fatto che il security broker filtra tutte le richieste potenzialmente pericolose.
Ovviamente, onde evitare che vengaono chiamate API dirette, è necessario il marketplace che esegua un controllo sugli import dell'applicazione (ricordiamoci che è nativa e che potenzialmente potrebbe fare qualsiasi cosa). Quindi il marketplace è vitale per poter fare i controlli di partenza.
A livello teorico è certamente possibile bypassare il marketplace ma non credo che sia uno scenario che verrà mai supportato da Microsoft proprio per i motivi che ho appena spiegato.

DX11. Le api esposte come WinRT sono ugualmente fruibili da qualsiasi linguaggio.
Per andare diretti sulle api DX11 attuali credo che C++ sia indispensabile. Non ho trovato documentazione sull'uso di XNA ma mi sembra ragionevole che verrà fuori visto che XBOX è una piattaforma che fa parte di questa 'wave' di tecnologie.
14/10/2011 13:48 | Raffaele Rialdi
Gravatar

# re: Essential WinRT parte 1: Il package

@Valter. Si le duplicazioni ci sono ma così lo scenario si semplifica in modo incredibile.
La gestione del versioning in COM era possibile ma troppo complessa e ha lasciato cicatrici.
Il primo punto che MS vuole risolvere è quello di rendere l'installazione/disinstallazione delle appx atomiche e senza addito a problemi di dipendenze.

Mia personalissima elucubrazione: credo che sia auspicabile che prevedano la dipedenza di un package da un altro. In questo modo una app potrebbe dipendere da un'altra che svolge il ruolo speciale di 'framework' (inteso come librerie). Questo darebbe modo all'utente di installare l'app e automaticamente anche la/le app dipendenti. Sarebbero comunque per-user ma eliminerebbe un po' di overhead.

Marketplace. Mi sono evidentemente spiegato male. Il market è bypassato da VS11 perché sviluppi sulla tua macchina e sei developer. Ovviamente se mi copio il package e lo metto su un'altra macchina *in questo momento* funziona ma non è quello che MS vuole.
Il marketplace è indispensabile per i controlli sugli import delle funzioni che intendi usare nella tua app.
Il marketplace "privato" è uno scenario che stanno valutando come mettere in piedi. Nessuno si è sbilanciato a dire come funzionerà. Posso pensare (mia elucubrazione) che sia uno spazio riservato alle aziende ma sempre presso la cloud di MS in modo che i controlli siano sempre gli stessi.
14/10/2011 13:57 | Raffaele Rialdi
Gravatar

# re: Essential WinRT parte 1: Il package

Microsoft ha detto fin dalla dev preview che le aziende potranno eseguire il deploy a partire da Active Directory, bypassando così lo store.
Ho altre notizie che non posso ancora condividere. Abbi pazienza e vedrai che presto le cose verranno chiarite.
Tieni conto che il primary focus di Win8 è il consumer, quindi ci si aspetta che almeno la prima ondata di applicazioni siano user-centriche. Ovviamente le aziende sono storicamente importanti per Microsoft che farà del proprio meglio per fornire loro un ambiente appropriato.
Risposta magari poco tecnica, ma molto realistica :)
12/03/2012 13:20 | Raffaele Rialdi
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET