Newsgroup: it.comp.lang.visual-basic
Titolo: Autoaggiornamento Consigli

Sto creando un sistema per l'autoaggiornamento dei miei programmi fatti in
Vb.
Sono già a buon punto.
In pratica ho scritto la parte in cui verifico tramite la comparazione di un
file sul server e uno sulla macchina quali sono gli elementi da scaricare e
aggiornare e faccio lo scaricamento in una cartella temporanea, sono invece
ancora indeciso per quanto riguarda il meccanismo di aggiornamento vero e
proprio.
Tempo fa se n'era parlato ed era emerso che qualcuno aveva usato le API per
registrare/unregistrare e le classiche funzioni di vb tipo filecopy per
copiare i file.
Io pensavo a qualcosa di più pratico.
La mia idea sarebbe quella di scrivere e lanciare un unico bat con le varie
istruzioni di aggiornamento in sequenza. Quindi un file fatto più o meno in
questo modo.
regsvr32.exe "file1.ocx" /u /s
regsvr32.exe "file2.ocx" /u /s
regsvr32.exe "file3.dll" /u /s
xcopy "c:\origine\file1.ocx" "c:\destinazione\file1.ocx" /v /y /e
xcopy "c:\origine\file2.ocx" "c:\destinazione\file2.ocx" /v /y /e
xcopy "c:\origine\file3.dll" "c:\destinazione\file3.dll" /v /y /e
xcopy "c:\origine\file4.exe" "c:\destinazione\file4.exe /v /y /e
regsvr32.exe "file1.ocx" /s
regsvr32.exe "file2.ocx" /s
regsvr32.exe "file3.dll" /s
Ovviamente dopo aver creato questo bat inserisco il suo percorso nella
chiave runonce del sistema e forzo un riavvio.
Cosa ne pensate, può funzionare?
I miei dubbi principali sono.
Sincronia e asincronia dei comandi lanciati da consolle nei vari sistemi
operativi.
Mi è capitato di usare questo sistema del bat per altri motivi in passato,
ad esempio scarico e lancio automatico di file delle definizioni dei virus.
In qualche occasione ho avuto problemi perchè sotto xp il sistema attende
che ogni comando sia terminato prima di lanciare il successivo,e va bene, ma
sotto 98 non sempre, ad esempio lanciando un file ".exe" spesso il sistema
passa all'istruzione successiva del bat prima che il file exe sia stato
chiuso.
I parametri dei comandi spesso cambiano da so a so, ad esempio ho avuto
problemi perchè alcuni parametri che sotto xp esistono per mappare per dire
una porta o una unità di rete sotto 98 non esistono o non sono uguali.
I miei dubbi nascono da questo, soprattutto dal fatto sincorno\asincrono.
Sotto 98 o 95 lanciando i vari regsvr32 e xcopy in un bat unico vengono
eseguiti riga per riga aspettando il termine di ogni esecuzione o no?
Non vorrei che il sistema tentasse ad esempio di registrare un componente
mentre magari lo sta ancora copiando.... non sarebbe bello.
In generale qualcuno ha info da darmi? Oltre al fatto che ovviamente faro'
qualche prova per conto mio prima di procedere.
-- 
Le persone non sono il proprio comportamento: devi sempre andare oltre,
essere flessibile, capire il punto di vista degli altri, interpretarne i
comportamenti ed intuirne le esigenze.
Per rispondere in privato elimina
dall'indirizzo "togliquesto"
MasterDavidex
David Ruscelli

 ha scritto nel
messaggio news:c5geti$1bsq5$1...@ID-110499.news.uni-berlin.de...
quoto tutto. mi ritrovo molto nel discorso, anche io mi ero messo d'impegno
per realizzare un motore di aggiornamento del mio applicativo. Ti sottopongo
alcune questioni:
1) a me capita più o meno spesso di dover modificare la struttura del db del
mio applicativo (nuovi campi per nuove implementazioni, ad esempio). Quindi
non si tratta di distribuire files exe/dll nuovi o aggiornati, ma lanciare
"script" sql (alter table, create table, insert into, bla bla bla). Tu come
faresti?
2) non riesco a spiegarmi bene, vediamo se ci riesco. Come risolvi
l'aggiornamento, per dire, di 4 PC che sono aggiornati a release diverse
l'una dall'altra? faccio un esempio....
PC1 = 3.4.1
PC2 = 3.2.0
PC3 = 3.2.0
PC4 = 1.0.0
l'idea che era venuta a me era quella di "fotografare" lo stato di un PC
tramite l'impiego di un file XML contenente l'elenco dei files (ed altre
info) con il num di release, la dimensione bla bla bla.
lo stesso file con contenuti diversi io l'ho messo sul mio sito. La
procedura di aggiornamento non faceva altro che paragonare i due files e
stilare una lista dei files che devono essere aggiornati, indipendentemente
dalla release in cui ci si trova. Questo per evitare di dover scrivere file
batch che indichino l'ordine con cui fare le cose, perchè non lo si può
sapere a priori.
3) per sapere cosa "fare" con ciascun file, lo decido io a seconda
dell'estensione:
- il .bat lo copio nella dir di destinazione e lo eseguo
- exe vengono semplicemente copiati
- dll vengono deregistrate, copiate e registrate
e così via. L'unico dubbio che mi è rimasto è tutta una serie di questioni
di sicurezza (utente con permessi limitati, ad esempio), ma ho deciso di
fregarmene......;-)))
morale: io non userei .bat per gli aggiornamenti: l'utente può decidere di
interrompere l'esecuzione, se gli va, e corromperesti tutto. fallo tu da
codice, è meglio......
good coding!!!
-- 
Alletun
"Io lo so che accadrà. La voce sussurra nei miei pensieri di Jair, Rone,
Allanon e soprattutto nelle Mortombre.
Sussurra segreti che mi sono tenuti nascosti, nella grigia oppressione
di questo giorno e nell'oscurità caliginosa di quello che mi aspetta.
Saremo distrutti. Tutti."
Brin Ohmsford - La Canzone di Shannara - T. Brooks

 tutto. fallo tu da codice, è meglio......
D'accordissimo!

 -- 
-- 


 
http://makeashorterlink.com/?U53021208
Cavolo ! non mi stupiro' mai di come scelga sempre i tuoi stessi metodi,
siamo mica parenti ? Gemelli ? Bho !
Fatto sta' che una cosa simile l'ho realizzata all'inizio dell'anno
ed e' Esattamente come la tua, file Txt formattato con mie regole, la
principale :
La app ha nel registri una voce "Versione" il file Txt che scarico ha come
prima riga : @Versione (numero Obbligatoriamente incrementale)
Nella situazione di Nutella :
PC1 = 3.4.1
PC2 = 3.2.0
PC3 = 3.2.0
PC4 = 1.0.0
mettiamo caso che la versione ultima dello script sia la 341
Il PC1 si avvia e salta l'upgrade
 il Pc 2,3 e 4 entrano nell'upgrade :
"If versioneCorrente < versioneNelloScript then
        AggiornaVersione ' lancia anche l'upgrade dei file oltre agli script
Sql
else
        AggiornaNormale ' Esegue solo i @999 (vedi sotto)
End if
Aggiorna non fa altro che lanciare gli script DA versionecorrente a
VersioneScript
il file diciamo che e' fatto cosi :
<BOF>
 ; versione script
@341
; XX YY ZZ @ VERSIONE COMANDO
; XX = database
; YY = livello utente per vedere se applicare le modifiche o no ecc...
; DbDati
;Tabella clienti
......
;tabella TBL1 ...
@336 010000 Alter Table TBL1 ADD COLUMN "CICCIO" TEXT 50;
...
@341 010000 Alter Table TBL1 DROP ... ;
...
;@EOF @XXX ZZ = 0 riavvia prg 1 = continua 2 = esegui bkup ecc...
<EOF>
non mi ha mai fallato e non mi ha mai perso nulla
PS: eseguo SOLO 1 versione per volta perche' a fine file metto anche
l'operazione da fare e quindi prima di procedere a passare dagli script 340
ai 341 posso tranquillamente riavviare il pc ecc...  Concordo con il mio
gemello Lupo ( Un lupo e un topo gemelli ? ) e' un metodo OTTIMO e sono
felice di averlo realizzato !
PS1: uso anche un tag @99X che sono istruzioni da eseguire SEMPRE ad avvio
ho solo 999 che fa il drop solo sulle tabelle temporanee o di log (che creo
da programma) e altre manutenzioni ordinarie dei Db come bkup e
compattazione su tabelle e Db non vitali (dato che alcuni DB temporanei li
distruggo e li ricreo con un delete e un "Name dbtempBase dbtempCorrente"
PS2: allo stesso modo tratto gli Exe e gli update di ocx, file myUpdate.txt
che contiene le operazioni da fare, lo eseguo da un Exe esterno che lancia
tramite shellexecute attendendo la fine istruzione di ogni operazione,
l'unica differenze e' che e' un file di script unico per ogni upgrade e non
tiene conto degli storici come lo script (che contiene gli aggiornamenti
dalla prima all'ultima versione)
il file e' simile :
<BOF>
; @XXX YY ZZZZ...Z
; @XXX  ordine in cui eseguire le cose
; YY Tipo comando
;        00 =  shell
;        01 = shellexecute
;        02 = bkup ecc...
; ZZ COMANDO
<EOF>
l'exe fa questo : legge, esegue, cancella le linee e aggiorna il fie
Es:
<BOF>
@000 00 name ciccio.txt ciccio.old
@000 00 name ...
; riavvia PC
@000 99
@001 name ....
....
<EOF>
-- 
<Gigio2K>
--- 
http://www.g2kweb.it/gigio2k
 ---
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 fatti in Vb.
Cavolo ! Dovremmo mettere insieme le nostre 4 versioni e crearne uno
standard !
(Free se vi va) prendiamo il meglio di ogni sistema e lo mettiamo a
disposizione sul sito cosi facciamo vedere che anche noi Basicchiani abbiamo
spirito di opensource serio e non ci limitiamo a condividere "snippets" di
codice !!!
