Deployment
Roberto Brunetti
[email protected]
http://blogs.devleap.com/rob
http://thinkmobile.it/blogs/rob
Marco Frontini
[email protected]
www.softandroll.it
Fabio Santini
[email protected]
www.fsantini.net
http://blogs.msdn.com/fabiosantini
Passi
• Windows CE supporta nativamente CAB
• Visual Studio .NET 2003 produce CAB
• Si possono personalizzare
• Installazione
• Download CAB da Share/Web
• Compact Flash o SD
• Procedura di setup più complessa
• Installazione altre librerie
• Prodotti di terze parti
• Visual Studio 2005
Compilazione e Installazione
Source Code
(Hello.*)
Windows + Visual Studio .NET
Device
.NET
Compiler
Hello.exe
Hello.dll(s)
Content
Deployment
Method
Hello.cab
Hello.cab
WCELoad.exe
.NET CF
Class Libs
Hello.exe
Hello.dll(s)
.NET CF.cab
Non sempre necessario
.NET CF.cab
.NET CF
CLR
Un progetto Tipo
• Applicazione .exe
• Componente.dll .NET
• Interno alla solution
• Esterno alla solution
• Immagini
• Interne
• Esterne
• Compact Framework da installare (SP3)
• Altre librerie (OpenNETCF)
• File di configurazione .config
• Da leggere con OpenNETCF
La Solution
• Referenziare la DLL da Project
• Oppure da DLL compilata (in release)
• Verificare da Progetto App (Tasto Dx Properties)
• Project Dependency
• Build Order
• Impostare Output Folder da VS
• Sull’eseguibile e sulla DLL (verificare dll)
• Impostare Build Action sui file da includere
• ...
Build Action
• Compile
• Form e Classi
• Content
• Per file da portare nella dir dell’applicazione
• Configurazioni/Immagini (Img.jpg)
• Vengono Copiati con F5
• Vengono inclusi nel CAB
• None
• File non inclusi (Diagrammi, Documentazione)
• Embedded Resources
• Inclusi nell’assembly
• Immagini interne (ImgEmbedded.jpg)
Codice
• Come leggo ImgEmbedded.jpg e Img.jpg ?
Assembly io = Assembly.GetExecutingAssembly();
Bitmap jpgEmbedded = new
Bitmap(io.GetManifestResourceStream("Applicazione.Im
gEmbedded.jpg"));
picEmbedded.Image = jpgEmbedded;
string pathApp =
Path.GetDirectoryName(io.GetName().CodeBase);
Bitmap jpg = new Bitmap(pathApp + "\\Img.jpg");
picEsterna.Image = jpg;
Compilare
• Impostare Release Mode
• Compilare
• Output nella directory bin
• Applicazione.exe
• Componente.dll
• Assembly nella GAC
• Librerie shared non copiati nella bin
• Nostri assembly...
GAC
• Creare un file di testo XXX.GAC
• Con una riga per ogni assembly da mettere nella GAC
• \Program Files\Applicazione\Comp1.dll
• \Program Files\Applicazione\Comp2.dll
• Copiare il file sotto \Windows
• Modificare inf di creazione CAB...
• AutoInstall all’avvio di qualunque app .NET
• Usare GACUtil.exe – i \path\Comp.dll
• Potrebbe farlo l’applicazione alla partenza
• Con flag (registry o config) per “Done”
• CreateProcess API o OpenNETCF
CAB
• Build CAB File
• Sotto Cab
• Applicazione.<platform>.cab
• Non contiene CAB esterni (.NET CF, SQLCE, OpenNET etc) !
• Applicazione.<platform>.dat
• Sotto Obj/Release
•
•
•
•
•
Applicazione.exe
Applicazione.<platform>.inf
Dependecies.<platform>.txt
BuildCab.bat
Vsd_config.txt.<platform>
Che casino ?!?!?
• BuildCab.bat
• Per ricreare i cab
• Utilizza cabwiz.exe (esiste da CE 2.0)
• /cpu ARMV4 ARM SH3 MPIS X86 WCE420X86 Default
• Dependecies.<platform>.txt
• Lista delle dipendenze esterne dai vari cab creati
• Nessuna nostra DLL visto che il progetto la contiene
• .NET CF e OpenNETCF
• Come riferimento al CAB per l’installazione
• Per ogni processore
• Controllato durante l’installazione rispetto ai file
vsd_config.txt.<platform> per la versione di ogni dll inclusa nel
cab
Vsd_config.txt.<platform> (Es PPC3)
Applicazione
0,netcf.core.ppc3.arm.cab,Mscoree.dll,1,0,2268,00,,,,,,6
0,netcf.core.ppc3.arm.cab,Mscoree1_0.dll,1,0,2268,00,,,,,,6
0,netcf.core.ppc3.arm.cab,Cgacutil.exe,1,0,2268,00,,,,,,6
0,netcf.core.ppc3.arm.cab,Netcfagl1_0.dll,1,0,2268,00,,,,,,6
0,netcf.core.ppc3.arm.cab,Calendar_1_0.nlp,,,,,,,,,,
0,netcf.core.ppc3.arm.cab,Charinfo_1_0.nlp,,,,,,,,,,
0,netcf.core.ppc3.arm.cab,Culture1_1_0.nlp,,,,,,,,,,
0,netcf.core.ppc3.arm.cab,Culture2_1_0.nlp,,,,,,,,,,
0,netcf.core.ppc3.arm.cab,Region_1_0.nlp,,,,,,,,,,
0,netcf.core.ppc3.arm.cab,Mscorlib.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,System.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,System.drawing.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,System.web.services.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,System.windows.forms.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,System.windows.forms.datagrid.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,System.xml.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,System.net.irda.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,System.data.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,Microsoft.visualbasic.dll,1,0,2268,00,7,0,5000,0,969db8053d3322ac,1
0,netcf.core.ppc3.arm.cab,Microsoft.windowsce.forms.dll,1,0,2268,00,1,0,5000,0,969db8053d3322ac,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.Windows.Forms.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.Drawing.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.Data.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.Net.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.Xml.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.VisualBasic.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.Phone.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.Web.Services2.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
11,OpenNETCF.SDF.ppc3.ARM.CAB,OpenNETCF.WindowsCE.Forms.dll,1,3,50511,0,1,3,50511,0,30c767b29d52d6e6,1
Applicazione.<platform>.inf
• Informazioni di installazione
• Creazione Shortcut
• Aggiunta file per \Windows
• Potrebbe essere il famoso .GAC
• Prima di procedere semplifichiamo
• Mettiamo un solo processore (X86) per capire meglio
tutti i riferimenti
• I concetti si applicano poi a tutti i processori
.inf
• Directory
• \Program Files == %CE1”
• \Windows == %CE2%
• InstallDir non rispetta l’impostazione di VS Output Folder
• Sposto file .txt in Dir Windows
• Creare sotto [DestinationDirs]
• Files.Win=0,%CE2%
• Creare [Files.Win]
• Spostare da Files.Common i file per la dir Windows
• Aggiungere a [DefaultInstall] CopyFiles “,Files.Win”
• Cambiare il nome allo shortcut
Ce Application Manger
• .ini
[CEAppManager]
Version
= 1.0
Component = Applicazione
N.B. Senza spazi!!!
[Applicazione]
Description = Setup a Palla di App.NET
CabFiles
= xxx_PPC.ARM.CAB,xxx_PPC.SH3.CAB
DeviceFile
= xxxx.exe
Finalmente
• Prova di instazione
• Portare il cab CORRETTO sul device
• Corretto per platform e processore
• Nel modo preferito (ActiveSync/Web/Share/SD)
• Lanciare il .CAB
• WCELoad si incarica di installare il contenuto del CAB
• Viene cancellato alle fine dell’installazione
• Verificare
• Shortcut
• Directory Setup + Dir Windows
• Lanciare App (Errore !!! Se non installate le librerie)
• Error Detail
• Add/Remove Programs
Un oretta di lavoro
• Per un setup che
• Fa un po’ ca...
• Installazione manuale da device
• Non installa i cab aggiuntivi
• SQLCE
• .NET Compact Framework
• Molti device ce l’hanno in ROM
• Si...ma quale versione e quale SP ?
• Però
• Comodo
• Se abbiamo il controllo del device
• E se i device non sono “troppi”
Opzioni
• Scaricare da Web
• Pagina con scelta <platform> e <processore>
• Con istruzioni per l’utente
• Start / Settings / Systen / About
• Oppure combo con i device (decodificati server-side)
• Prima download .NET CF / OpenNETCF / SQL CE
• Scaricare da Share
• Mettere readme o htm come sopra
• Compact Flash o SD
• Mettere readme o htm come sopra
N.B. Compact Flash o SD
• Autorun.exe
• Da scrivere in eMbedded C++
• Altrimenti se non c’è il Framework ?
• Sottodirectory per processore
•
•
•
•
•
•
\Storage Card\2577\Autorun.exe
MIPS (41xx series and 3910) : 4000
SH3 : 10003
SH4 : 10005
StrongARM : 2577
XScale : 1824
E ora ?
• Ne ho distribuite 4000…
• Come le tengo aggiornate ?
• Live Update fatto a mano
Setup da PC
• Comodo se gli utenti hanno un PC
• Lavora via CE Application Manager
• Sul device connesso via ActiveSync
• Creare Exe di setup
• Che installa i CAB a seconda del processore
• CE Application Manager (CeAppMan)
• usa .ini come configurazione
• Consente scelta directory durante il setup
• Localizzata per default (Programmi/Program Files)
EzSetup -> Exe di Setup
• Gratuito da SpbSoftware.com
• Creare
• Readme.txt
• Licence.txt
• Setup.ini (Standard per CEAppManager)
• Prendere
• CAB e copiare stessa directory
• Lanciare
• EzSetup
EzSetup Files
• Readme.txt
• Qualunque nome e contenuto
• Viene mostrato durante il Setup
• Licence.txt
• Qualunque nome e contenuto
• Viene mostrato durante il Setup [Accept]
• .INI
• Informazioni per Setup tramite CE App Manager
• ezsetup.exe -l english -i App.ini -r
readme.txt -e licence.txt -o AppSetup.exe
Installazione CAB aggiuntivi
• Come per il CAB normale
• Web / Share / SD / EzSetup
• .NET Compact Framework SPx
• Da Exe Redistributable
• Oppure fare a manina EzSetup con i vari CAB rubati
dalla directory “scompattata”
• Tip: copiarli anche nelle dir di VS 2003 per l’instazione
automatica con F5 !
• Da C:\Program Files\microsoft .net compact framework 1.0
sp3
• OpenNETCF / SQL CE
• Vedi sopra (CAB normale)
Un setup completo di tutto ?
• In realtà si potrebbe...
• Non si può mettere cab diversi nel .ini per Ce
Application Manager
• Quindi niente EzSetup
• Ma CE App Manager supporta più file .ini in
contemporanea
• Ognuno con l’installazione di un CAB
• CeAppMgr.exe “x:\...\Applicazione.ini”,
“x:\...\SQLCE.ini”, “x:\...\NETCF.ini”
• Creare i .ini come abbiamo appena visto
• Path Assoluti !!!!
Un setup completo di tutto
• Da desktop
•
•
•
•
Comodo se pochi device
InstallShield
MSI
Wise
• Da Web diretto sul device
• Non si può a meno di non lavorare con un exe C++ che
poi scarica tutte le cose a modino 
• Oppure essere sicuri della presenza del .NET CF
• Per una distribuzione più massiccia
• XcelleNet Afaria
• SMS 2003 Device Management Feature Pack
MSI
• Per instazioni più semplici da Desktop
• Cosa serve
• .ini per CE Application Manager
• Ce l’abbiamo
• File .cab
• Ce l’abbiamo
• Installer Component
• Da scrivere in .NET per fortuna
• .MSI (che l’utente lancerà)
• Da fare
Creazione
Quelli di sempre
MSI Launch
Demo Wise
• Si può fare a mano
• Esempio in download
• Wise
© 2004 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.
Content created by 3 Leaf Solutions
Scarica

Slide 1 - Microsoft