Newsgroup: it.comp.lang.delphi
Titolo: Aggiornamento da internet...

Salve a tutti, il mio quesito è questo:
ho in distribuzione un applicativo presso i miei clienti formato da un solo
eseguibile di 7 Mega (la procedura è piuttosto complessa) ed ora ho
realizzato a menù la voce "Aggiorna da internet". Il funzionamento l'ho già
testato poichè all'interno del file di registro scrivo la versione del
porgramma e sul mio sito ho 2 file (uno si chiama update.txt che contiene il
numero di versione che ha il programma attualmente sul sito e apll.exe che è
appunto l'aggiornamento). Vengo al problema. Lanciando la scelta a menù io
confronto le due versioni e se quella sul sito è più recente chiedo se si
vuole fare l'aggiornamento. Riesco quindi a fare il download, ma con
l'applicativo aperto non posso sostituire l'eseguibile; come posso fare,
dopo aver finito il download dell'aggiornamento, a chiudere l'applicativo e
sostituirlo con quello appena scaricato ???
grazie a tutti
omerosx


Mi vengono in mente due soluzioni:
Prima
- Riavviare windos e far eseguire in modo automatico un programma che 
sovrascriva il tutto, dovrebbe essere utile la chiave del registro 
"runonce".
Seconda
- Eseguire un programma che si prepari a sovascrivere (chiamato ad 
esempio OWR), chiudere il tuo applicativo, quando il programma OWR vee 
che l'altro programma è chiuso lo sostituisce e poi riapre quello nuovo.
Esisterebbe anche una terza soluzione, quella di far credere a windows 
che è file non è piu' aperto anche se in realtà lo è e poterlo 
sovrascrivere ma sul momento non so come si faccia.
ciao
-- 
---------------------------------------
Per rispondere in privato togliere 1975

ciao e grazie, anch'io pensavo ad una soluzione come la tua seconda
proposta. Infatti aveva già buttato giu due righe del mini applicativo che
faceva 2 rename. Il vecchio in .old e il nuovo che sostituiva il vecchio. Il
mio problema è : questo mini apll. lo lancio al termine del download poi
lancio il close dell'applicativo vero e proprio; come faccio con il mini
appl. ad attendere che il programma si chiuso in modo poi da eseguire le
operazione di scambio nomi ??
omerosx

 ha scritto nel messaggio
news:bimxa.188219$K35.4...@news2.tin.it...


ciao, quindi tu dici di :
shellexecute(aggiorna.exe);
close; (dell'applicazione madre)
intanto aggiorna.exe come prima riga contiene
msgbox('Aggiorni si o no');
giusto ??
omerosx

 ha scritto nel messaggio
news:qOmxa.188333$K35.4...@news2.tin.it...


ecco la soluzione che ho adottato :
var
  nome_programma: array[0..79] of Char;
  S: String;
begin
  S := path_locale + 'aggiorna.exe'; // path_locale contiene il percorso sul
disco dove viene scaricato aggiorna.exe dal sito internet
  StrPCopy(nome_programma, S);
  Screen.Cursor := crHourGlass;
  MainForm.Close;
  ShellExecute(handle, nil,nome_programma,nil,nil,sw_show);
  Screen.Cursor := crDefault;
  exit;
quindi facendo clic sul tasto Aggiorna presente nel MainForm, lo stesso
MainForm si chiude lasciando libero il .exe dell'applicazione e verrà
lanciato aggiorna.exe che è uno exezip autoestraente che sostituira il
vecchi eseguibile dell'applicativo con il nuovo.
Un ringraziamento a tutti ed in particolare a Simone P. (mi sono servito
della tua idea)
omerosx

 nomi ??
Chiami la jclSysInfo.TerminateApp. Alla peggio, chiama TerminateProcess,
quindi il processo sara' chiuso (o non potra' in altro modo essere
chiuso).
Saluti
Paolo Arosio

 ha scritto nel messaggio
news:z9Nxa.194638$K35.4...@news2.tin.it...
