Newsgroup: it.comp.lang.visual-basic
Titolo: Setup e crystal report

Ho creato un programma gestionale, ma quando lo vado ad istallare, dopo aver
creato il setup, mi dice prima che c'è un errore di registrazione del file
cc245it.dll, e, se lo ignoro,  mi aggiunge che non trova e quindi non può
registrare il file $(DLLSelfRegisterEx).
Mi hanno detto che tale problema si può risolvere estraendo il file
crystit.cab. Sepreste indicarmi un'altra soluzione oppure dirmi dove posso
trovare crystit.cab?

 registrare il file $(DLLSelfRegisterEx).
io avevo un problema analogo con un altro controllo (mscal.ocx) e l'ho
risolto "brutalmente" modificando $(DLLSelfRegisterEx) in
$(DLLSelfRegister) nel file SETUP.LST creato dal setup wizard, prima di
eseguire l'installazione. Alle prove fatte, la cosa ha funzionato
perfettamente, tranne nella disinstallazione (ma chissene, mi sono detto !)
Non so quale versione di VB abbia tu e se hai preparato il CD di
installazione con il setup Wizard fornito col VB, comunque io ho il VB 5 e,
da quello che mi sembra di aver capito, la ragione del problema è un bug
del programma Setup1.EXE (di cui Microsoft fornisce i sorgenti, quindi se
proprio ti va puoi modificarlo, ma bada che ci vuole moolta pazienza!).
Il problema è il seguente: setup1 "legge" dal file SETUP.LST la lista dei
file da installare, e per ogni file ci sono una serie di informazioni
(dimensione, versione, data e ora ultimo aggiornamento, directory di
destinazione, registrazione, ecc. ecc.); alcune informazioni, però, possono
essere sotto forma di "macro", che il programma suddetto "espande"
ricavandone la stringa intera. Mi spiego meglio: $(AppPath)\pippo è una
macro, $(AppPath) viene "espansa" nel nome della directory di destinazione
del programma; se questa è, ad es., "C:\Programmi\mamma" la macro di cui
sopra viene espansa in "C:\Programmi\mamma\pippo".
Alcune macro riguardano la registrazione dei controlli ActiveX o di altre
librerie; ad esempio, se "editi" il file SETUP.LST noterai che è ricorrente
la $(DllSelfRegister): questa macro viene espansa in DllSelfRegister e
l'argomento passato a una funzione che si occupa di inserire le
informazioni nel register, chiamando la routine API appropriata (chiedo
scusa per le imprecisioni dovute alla sintesi).
Ora, il fatto è che *alcune* librerie richiedono la chiamata alla API
DllSelfRegisterEx, anziché DllSelfRegister; mscal.ocx, ad es., è una di
queste. DllSelfRegisterEx fa "un po' di cose in più" rispetto a
DllSelfRegister, non o bene quanto necessarie, visto che, nel caso di
mscal.ocx, sembra che tutto funzioni anche solo con DllSelfRegister.
Dunque, quando setup wizard crea il pacchetto per l'installazione delle
applicazioni, "legge" per ogni OCX (o quant'altro) aggiuntiva alcune
"informazioni" da uno o più file (file di dipendenze) per la OCX (o DLL,
ecc.) medesima, tra cui le modalità di registrazione, e scrive queste
cosine nel file SETUP.LST che sarà poi utilizzato dal programma Setup.EXE
(prima) e dal programma Setup1.EXE (dopo) quando verrà effettuata
l'installazione.
Qual è il problema? Risposta: chi alla Microsoft ha progettato Setup1, si è
"dimenticato" ;-) di prevedere DllSelfRegisterEx tra le possibili macro,
quindi se vede quella stringa in SETUP.LST non si "accorge" che è una macro
e non la espande; crede, invece, che si tratti del nome di un file
(contenente le informazioni di registrazione per la libreria), cerca quel
"file", e (naturalmente) non lo trova, da cui l'errore.
Soluzioni possibili:
 1) Incaxxarsi, mandare a quel paese Guglielmo Cancelli e il suo setup
Wizard & Co. e passare a InstallShield o altro ;-)
 2) preparare con Setup Wizard il pacchetto di installazione, poi
modificare il file SETUP.LST cambiando *tutte* le occorrenze di
DllSelfRegisterEx in DllSelfRegister (funziona con mscal.ocx, ma...? prova
e poi fammi sapere)
 3) risolvere il problema "alla radice" modificando il programma Setup1.vbp
(di cui hai i sorgenti) in uno dei due modi seguenti:
  3a) fare in modo che la macro $(DllSelfRegisterEx) venga interpretata
come $(DllSelfRegister) (equivale alla sol. 2, solo che non hai più bisogno
di editare SETUP.LST)
  3b) espandere anche la macro $(DllSelfRegisterEx), solo che non è
semplice: se ti va e hai tempo da perdere, guardati il codice e poi
impazzisci un po'. Se riesci, però, questa è sicuramente la soluzione più
efficace
Se opti per una delle soluzioni 3) devi poi, ovviamente, ricompilare
Setup1.vbp e rifare il pacchetto d'installazione con setup wizard (
"autocomposizione installazione", che dir si voglia)