Il modello di Provisioning di Windows Mobile

Stavo rispondendo ad una mail di un partecipante alla mobility conference di Roma che mi chiedeva come installare un applicazione su un pocket pc dopo che si è effettuato un hard reset. Premetto che esistono molti modi (magari farò qualche altro post). Diciamo che vogliamo mettere a disposizione del nostro utente una schedina SD con dentro il nostro software che deve essere installato. L'installazione di un software prevede normalmente una serie di attività da svolgere sul palmare:

1) Configurare il sistema (connessioni GPR, voci di registro, etc).
2) Installare il programma ed eventualmente il .NET Framework

Il tutto deve avvenire senza chiedere all'utente di "cliccare" da nessuna parte, ma partire in automatico quando l'utente inserisce la schedina SD nel palmare.
Partiamo dall'inizio: per configurare la maggior parte delle impostazioni di sistema possiamo utilizzare il nuovo modello di provisioning di Windows Mobile. In pratica è possibile "passare" a Windows Mobile un file XML che definisce quali azioni vengono richieste a determinati provider. In pratica esiste un Configuration Manager che è in grado di recuperare un file XML (poi vedremo come fornire questo file, e qui inizia il divertimento :-)), di selezionare il Configuration Provider giusto al quale passare la configurazione. Il Configuration Provider leggerà il file XML e lo applicherà al dispositivo. Il file XML deve essere nel formato MSPROV DTD che è un estensione dello standard Wireless Application Protocol (WAP) Provisioning Content Specification. Qui trovate il reference che stabilisce ogni elemento dello schema. Una volta definito il file xml dobbiamo mandarlo in pasto al Configuration Manager, normalmente creando un cab di installazione. Ecco i passi da fare.

1) Salvare il file con il nome _setup.xml
2) Creare un cab per pocket pc o per smartphone che contenga solo quel file : makecab /D COMPRESS=OFF _setup.xml fabio.cpf (attenzione COMPRESS=OFF solo per pocket PC)
3) Utilizzare il tool SIGNCODE per firmare digitalmente il cab (potrebbe funzionare anche senza , dipende dalle configurazioni di sicurezza del palmare o del pocket pc)

A questo punto abbiamo un file cab con estensione CPF che una volta lanciato sul dispositivo farà partire la configurazione desiderata. Per esempi , se volessi aggiungere una connessione GPRS potrei scrivere un file xml così:

<wap-provisioningdoc>
   <characteristic type="CM_GPRSEntries">
      <characteristic type="GPRS1">
         <parm name="DestId" value="{436EF144-B4FB-4863-A041-8F905A62C572}" />
         <characteristic type="DevSpecificCellular">
            <parm name="BearerInfoValid" value="1" />
            <parm name="GPRSInfoValid" value="1" />
            <parm name="GPRSInfoProtocolType" value="2" />
            <parm name="GPRSInfoL2ProtocolType" value="PPP" />
            <parm name="GPRSInfoAccessPointName" value="ibox.tim.it" />
            <parm name="GPRSInfoAddress" value="" />
            <parm name="GPRSInfoDataCompression" value="1" />
            <parm name="GPRSInfoHeaderCompression" value="1" />
            <parm name="GPRSInfoParameters" value="" />
         </characteristic>
      </characteristic>
   </characteristic>
</wap-provisioningdoc>

Passiamo ora a far installare automaticamente questo cab quando l'utente inserisce la scheda SD sul palmare (questa operazione vale anche per il cab della propri applicazione ed eventualmente di altri cab, tipo il .NET Compact Framework o SQL CE). Questi i passi :

1) Copiare il file CPF nella root della SD
2) Creare una directory con il nome 2577 (attenzione che 2577 vale per il processo StrongARM altrimenti qui)
3) Creare un piccolo programma con il nome autorun.exe  e posizionatelo nella directory appena creata. Il programma chiamerà l'API shellexecute sul file CPF e su tutti gli altri cab da installare

A questo punto quando l'utente inserirà la schedina SD nel palmare il vostro programma partirà e installerà tutti i cab necessari compreso quello specifico per la configurazione.

Ci sono modi diversi di "fornire" il file XML al dispositivo , tramite WAP, SMS, etc. , qui trovate l'elenco di tutti quelli supportati.