Ultimamente sono stato impegnato in diversi lavori interessanti percui ho avuto poco tempo per bloggare, ma mi sono promesso di riprendere in mano 1po di appunti che sono in archivio sotto la voce "da bloggare"....
Quindi oggi sono riuscito a recuperare 1po di tempo per cominciare, da questo appunto che mi sono fatto riguardo ad una applicazione che ho sviluppato e che ho deciso di distribuirla ai clienti tramite ClickOnce.
Il procedimento è assolutamente facile, si pubblica l'applicazione in uno spazio web o su una cartella in rete, tramite la voce "publish" del progetto e l'utente finale la installa direttamente dalla pagina di "collegamento" che la pubblicazione genera in automatico, o cmq da un link al file .application.
Controllo della versione del framework, aggiornamenti successivi, download etc...tutto gia' fatto automaticamente...che dire se non "fenomenale"? in 3minuti si sono risparmiata ore di sviluppo di programmi di update vari...
* segnalo cmq il fatto che per l'utente che si connette tramite un proxy che richiede l'autorizzazione ci sono ancora dei problemi: http://support.microsoft.com/kb/917952/en-us
Quello che invece voglio segnalare è una cosa in cui potreste incappare se come me dovete integrare qualche componente COM nel vostro progetto .net.
Il problema ovviamente principale è che devono essere registrati, e ovviamente dovrebbe essere fatto automaticamente e infatti se lo specificate nella pagina delle proprieta' del progetto viene fatto correttamente.
La cosa piu' "delicata" da sapere pero', sta nel fatto che la vostra applicazione quando viene installata sul pc locale tramite ClickOnce prende una directory diversa per ogni installazione, visto anche il fatto che da pannello di controllo->installazione applicazioni si puo' tornare indietro di release.
Cmq a parte questo, il punto della questione è nel fatto di dire all'applicazione che quegli ocx devono essere portati giu' insieme all'applicazione nella stessa dir, ovvero dovrebbero essere ocx normali ma "isolati" dal sistema, perche' successive release vanno via indipendenti l'una dall'altra, e ognuna con la sua directory.
* Tipicamente la directory di installazione delle release è:
C:\Documents and Settings\matrau\Impostazioni locali\Apps\2.0\...\...
Il tutto si puo' fare impostando "Isolated=true" agli ocx che sono agganciati all'applicazione:
Ma la cosa che probabilmente sfugge (e che neanche a dirlo a me è capitata subito) è che in questa operazione vado ad agganciare solamente un ocx, ma cosa succede se poi lui fa riferimento ad altre liberie in cascata, magari che non devono neanche essere registrate?
In clickOnce non c'e' una gestione dei file dove dire aggiungi/rimuovi questo file, che sarebbe perfetta in questa situazione perche' quello che bastava a me in particolare era che quelle dll aggiuntive venissero copiate nella stessa dir dell'applicazione (e dove c'era l'ocx principale).
Morale della favola la soluzione c'e', ed è aggiungere quelle librerie al progetto principale (nel mio caso avevo una libreria che usava l'ocx e un progetto che era la mia applicazione WindowsForm ed è in quest'ultimo progetto che vanno aggiunte), specificando che i file vadano copiati in fase di "Buld", ovvero la "Build Action":
A questo punto li trovate nelle impostazioni del progetto "TastoDX sul nodo del progetto->proprieta'->"Publish" premendo il bottone "Application Files" di ClickOnce:
Con questi accorgimenti (e anche il service pack 2 di XP in modo che ci sia la versione corretta della stdole.dll) l'applicazione .net che ha OCX da registrare, librerie aggiuntive etc. funziona perfettamente, per tutte le release, copiando tutti i file che servono nella stessa directory e andando poi a registrare in automatico quelli "isolated".
A proposito, se vi state chiedendo se anche per palmare fosse possibile usare ClickOnce la risposta è "NO" purtroppo (ma io voglio credere che ci sia anche un "PER ORA NO")...speriamo che sia in roadmap per il team di Microsoft sarebbe veramente fenomenale soprattutto per le prime release delle applicazioni...