Visto che il mondo WinRT è un'evoluzione di quello COM, anche la registrazione è simile ma utilizza solo le chiavi di registro HKCU per cui non è necessario avere privilegi amministrativi.
Vediamo le chiavi di registry più interessanti:
La chiave HKCU\Software\Classes\ActivatableClasses\Package contiene la lista dei package registrati nel sistema.
Ogni sottochiave ha per nome il "Full Package Name" che è impostabile da Visual Studio 11 aprendo il file del manifest:
Di default il "Package name" è un guid ma è più conveniente utilizzare un nome completo di namespace e nome applicazione. Nel caso della app demo in javascript, ho impostato il nome a "IAmRaf.DemoApp" che troverò nel registry con alcune informazioni supplementari:
Sotto la chiave ActivatableClassId troviamo il nome della classe che si prende carico di "attivare" l'applicazione. Lo possiamo considerare il nostro punto di ingresso object oriented:
- "ActivationType" specifica se il componente è attivabile in-process (0) oppure out-of-process (1).
- "Server" specifica il nome della chiave Server sottostante (App.wwa)
Come da figura, App.wwa è il nome di default che è impostabile (solo via XML) nel manifest mentre "name" del tag "identity" è il "Package name" già modificato precedentemente.
Nel registry perciò possiamo vedere questi valori:
Sotto la chiave Server troviamo lo stesso "App.wwa" specificato sopra, dentro il quale troviamo la path completa all'exe del processo che fungerà da host.
- Se realizziamo l'applicazione in C#/VB/C++ questo corrisponde all'exe che abbiamo generato da Visual Studio
- Se invece è una applicazione javascript, questo specificherà un exe surrogato (analogo a dllhost dei tempi di COM)
Come si può vedere in figura l'host per l'applicazione di esempio è WWAHost.exe che è il generico host di una applicazione html5/javascript.
Il processo surrogato è importante per quei linguaggi che non possono provvedere al classico metodo "main". I progetti Metro realizzati con C# forniscono automaticamente il metodo main che istanzia la classe "App" (Xaml) e chiama il metodo statico Run. Applicazioni che utilizzano javascript necessitano un processo surrogato (WWAHost.exe) che sappia come renderizzare html5 e gestire gli script javascript. Explorer passa a WWAHost.exe l'application id (App.wwa nel nostro caso)via command line.
Il punto di ingresso dell'applicazione si trova sotto la chiave CustomAttributes. Le due immagini mostrano la differenza tra l'entry-point della demo in javascript e un'altra in C#:
Dalle ricerche che ho fatto, sembra possibile creare una applicazione o provider di un contratto come dll in-process. In questo caso non esisterebbe la "main" e di conseguenza l'entry-point sarebbe fondamentale.
Il processo di registrazione non è interessante per lo sviluppo di applicazioni ma può essere fondamentale per motivi diagnostici e per capire il valore degli elementi del manifest.
Nel prossimo post vedremo i passi essenziali all'attivazione dell'applicazione.