Share via


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.

Comments

  • Anonymous
    July 19, 2005
    interessantissimo...non ho mai avuto bisogno di fare il deploy di un'app su palmare, ma ci sono andato vicino!
    talmente vicino che cominciavo a chiedermi come si poteva fare...ecco la risposta!
    :-)
  • Anonymous
    November 14, 2005
    Ma l'autorun.exe deve essere scritto in un linguaggio particolare? Perché ne ho scritto uno in c# .net e non viene lanciato in automatico. Grazie per l'attenzione
  • Anonymous
    March 07, 2006
    Ciao vorrei porti una domanda, sto creando un file cab per un'applicazione da me fata che dovrà girare su pocket pc (Qtek) . Ora il mio problema è che dopo l'installazione dovrei far resettare il palmare in automatico in quanto vado a modificare alcune chiavi di registro. Ora come posso fare per effettuare il reset automatico???
  • Anonymous
    July 07, 2006
    Ciao Fabio,
    sono un non veterano del'argomento ma super interessato perchè dovrei creare un programmino da installare su pocketpc che mi chieda semplicemente user e password della connessione internet e che poi faccia tutto da solo per quanto riguarda la connessione.
    Come posso far chiedere all'utente user e pwd in modo che poi il programma configuri il palmare in automatico?

    Grazie mille
  • Anonymous
    January 02, 2008
    Ciao, ho letto l'argomento ed è quello che interessa a me. Io vorrei fare partire in automatico l'installazione di TomTom sul mio navigatore GPS perche ogni volta che lo accendo questo cancella i file di tomtom. questo è quello che avevo pensato: #include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow ) {  SHELLEXECUTEINFO shellinfo;  shellinfo.cbSize = sizeof(SHELLEXECUTEINFO);  shellinfo.lpVerb = TEXT("open");  shellinfo.lpFile = TEXT("NANDFlash2577t5.2.cab");  shellinfo.lpParameters = TEXT("");  shellinfo.lpDirectory = TEXT("NANDFlash2577");  shellinfo.nShow = SW_SHOWNORMAL;  ShellExecuteEx( &shellinfo );  MSG msg;  return (int) msg.wParam; } Solo che mi da errore Windows CE. Come faccio ???? Altrimenti ogni volta che stacco la radio dalla batteria della macchina devo installare manualmente il software. GRAZIE MILLE