Guide e Tutorials:indexed | ||||||||||||||||||
Creare manualmente file Cabinet (.CAB) Quando si va ad utilizzare un programma che genera pacchetti d'installazione, gran parte degli elementi del progetto da distribuire vengono compressi in un file Cabinet di estensione .cab. In realtà l'utilizzo di un file .cab può risultare molto utile anche al di là della creazione di pacchetti d'installazione, ad esempio se si desidera nascondere o comprimere determinate componenti del progetto. Ed è proprio questo che cominceremo a vedere in questo primo articolo: la creazione di un file Cabinet. I tre passaggi chiave per raggiungere lo scopo sono prima di tutto creare un file con estensione .ddf (Diamond Directive File) ossia un file che contiene tutte le direttive sui parametri di compressione da passare al programma di utilità MAKECAB.exe. In secondo luogo si dovrà creare un file batch per avviare in modalità MS-DOS il file MAKECAB.exe con ulteriori parametri. Infine si dovrà creare il file .cab semplicemente richiamando MAKECAB.exe e, se lo si desidera, rimuovere dalla cartella i file generati in eccesso. Tutto ciò potrebbe sembrare molto complicato, in realtà è stato sufficiente un quarto d'ora per scrivere il codice relativo all'intero progetto. E al di là della velocità è assicurata un'estrema semplicità nei concetti che si andranno a discutere. Innanzitutto inseriamo nelle dichiarazioni generali del codice una variabile denominata 'nomeFileCab' rappresenterà il nome del file .cab da generare e quindi sarà una variabile di tipo String:
e quindi dichiariamo un oggetto Collection che conterrà tutti i file da includere nel nuovo file .cab. Siccome risulta particolarmente utile avere una matrice con tutti i nomi dei file per poterli utilizzare in seguito, è consigliato l'uso di questo tipo di oggetto. In ogni caso se si hanno dubbi sull'utilizzo delle Collection fare riferimento all'articolo L'oggetto Collection:
Adesso passiamo al primo punto dei tre: la creazione di un file .ddf che contiene i parametri della compressione. Generalmente tale file viene denominato 'direct.ddf' ma non c'è ragione per non assegnargli un nome differente. Iniziamo a scrivere il codice di una nuova sottoprocedura alla quale verrà passato ad uno ad uno il percorso dei file da comprimere:
Ogni volta che vorremo aggiungere un file alla compressione, esso verrà introdotto nella Collection in modo da essere recuperato più avanti:
Notare che non è stato specificato l'indice che rappresenta la posizione del nuovo dato all'interno della Collection in questo modo ogni percorso sarà aggiunto come ultimo. Prima di continuare è necessario chiedersi a cosa serva creare un file Diamond Directive File. L'applicazione che stiamo sviluppando non crea file .cab in modo autonomo, ma con l'ausilio del file MAKECAB.exe che si dovrebbe trovare nella directory C:\WINDOWS oppure nella cartella di Visual Studio. MAKECAB.exe come dice il nome, comprime i file in un unico file .cab, ma per questo necessita di alcune direttive (il livello di compressione, i file da comprimere, il nome del file .cab da creare e così via). Sarebbe possibile utilizzare MAKECAB.exe direttamente dall'applicazione 'Esegui' ma naturalmente un programma di creazione di pacchetti d'installazione non può chiedere all'utente di andarsi a comprimere i file da solo... L'unico problema legato all'utilizzo di MAKECAB.exe da codice sta nel fatto che deve necessariamente essere presente nella cartella dell'applicazione o quanto meno se ne deve conoscere il percorso sul disco fisso. Se ne capirà in seguito il motivo. Optiamo perciò per la prima soluzione controllando se il file è presente nella directory ed eventualmente interrompendo l'applicazione in caso negativo:
Adesso non ci rimane altro che creare un file .ddf, che può essere aperto utilizzando un semplice editor di testo scrivendo su di esso i parametri standard di compressione utilizzati dalle applicazioni Microsoft:
dove la direttiva ".Set Cabinet=on" indica la generazione di un file .cab, la direttiva ".set Compress=on" indica che i file aggiunti al file .cab devono essere compressi, la direttiva ".Set MaxDiskSize=CDRom" indica che non esistono dimensioni massime per il file .cab di nuova creazione (ossia lo spazio massimo è lo spazio contenuto in un cd rom, visto che i file .cab sono espressamente utilizzati per essere distribuiti su tale supporto). ".set ReservePerCabinetSize=6144" riserva spazio per la firma digitale ".Set CompressionMemory=21" indica invece quanta memoria utilizzare nel processo di creazione del file .cab, ".Set CompressionType=MSZip" indica invece il tipo di compressione, ".Set CabinetNameTemplate=" indica il nome del file .cab da generare e ".Set DiskDirectoryTemplate=" il nome della directory sul disco. Adesso si andrà a scrivere nel file Direct.ddf ogni percorso incluso nell'oggetto Collection ossia ogni file che si desidera inserire nel file .cab e si chiude la sottoprocedura:
Creiamo ora il codice per la seconda sottoprocedura, quella che genererà in modo effettivo il file .cab. E' utile separare le due procedure perchè in quella appena vista si aggiungono solo i file da comprimere alla lista mentre nella prossima si comprimono effettivamente. Si andrà quindi a creare un file batch che simula l'azione dell'utente che al prompt di MS-DOS utilizza il file MAKECAB.exe. Denominiamo tale file Batch.bat:
Cominicamo a cancellare tutto quello che non serve nella finestra MS-DOS:
il file batch (con estensione .bat) una volta creato e sistemato come abbiamo fatto sopra apparirà così: ossia pronto ad operare nella directory WINDOWS. Siccome però dobbiamo eseguire il file MAKECAB.exe dal percorso della nostra applicazione, sarà necessario innanzitutto uscire dalla cartella corrente. Perciò:
ed ora andiamo nella cartella dell'applicazione:
Infine si potrà andare ad eseguire il comando che richiama il file MAKECAB.exe:
indicando come si nota il nome del file Diamond Directive File dal quale estrarre i parametri di compressione. Se si decidesse di avviare il progetto con queste istruzioni nel file .bat, al termine della creazione del file .cab verrebbero creati nella cartella corrente due file. Il primo, denominato Setup.inf risulta utile per specificare la versione dei file compressi, per aggiungere la firma digitale e le note legali. Un esempio di file .inf è il seguente: Il secondo file creato è denominato invece Setup.rpt è il report generato dall'applicazione MAKECAB.exe ed include i dati dell'operazione di compressione appena terminata (percentuale di compressione, numero file presenti nel file .cab, durata dell'operazione di compressione e così via). Ad esempio: Perciò si può decidere di mantenere tali file o cancellarli. Nel secondo caso si dovranno inserire le due istruzioni seguenti:
In ogni caso comunque si potrà cancellare il file direct.ddf creato poco prima poichè una volta terminata l'operazione di compressione non risulta più utile, e chiudere il file batch.bat:
Una volta compilato come abbiamo visto il file batch.bat che assegnerà le istruzioni all'applicazione MAKECAB, sarà necessario avviarlo. A questo scopo basterà fare uso di una semplice funzione Shell:
dove il parametro vbHide della funzione Shell indica che verrà avviato Batch.bat come una finestra nascosta. Per terminare l'applicazione manca solamente il passaggio dei percorsi dei file da comprimere. Sarebbe possibile organizzare un controllo ListBox in modo da permettere all'utente di inserire i file che desidera, ma in questo codice si passeranno i percorsi alla routine InserisciFile in modo molto semplice:
La prima linea indica il nome del file .cab da generare. La seconda e la terza indicano i file da comprimere e la quarta richiama la routine CreaCAB per la creazione del file .cab
|
Archivio:ndexed | ||||
Lezioni | Commenta questa lezione | Invia la tua guida | Avviso per le nuove lezioni | Proponi un argomento |
Visual Basic Italia© copyright 2000 - tutti i diritti riservati |