Newsgroup: it.comp.appl.access
Titolo: Miglior Quit o Kill per autoaggiornarsi

Ho la necessit� di sostituire mde in modo ricorsivo.
Per poter aggiornare se stesso l'mde deve essere chiuso per poi essere 
sostituito con uno nuovo.
Ma se qualcosa va storto nella sostituzione vorrei che l'.mde funzionante 
fosse riutilizzabile
Con uno script vbs del genere potrei Kill msacces.exe
Set colProcesses = GetObject( _
                       "winmgmts:{impersonationLevel=impersonate}" _
                       ).ExecQuery( "Select * From Win32_Process", , 48 )
    For Each objProcess in colProcesses
        If LCase( MYPROCESSs ) = LCase( objProcess.Name ) Then
            ' Confirm that the process was actually running
            blnRunning = True
            ' Get exact case for the actual process name
            myProcess  = objProcess.Name
            ' Kill all instances of the process
            objProcess.Terminate()
        End If
    Next
e procedere con la sostituzione...
ma potrebbe corrompere l'mde e non potrei riutilizzarlo in caso di errore.
Esistono in internet dei killprocess che tentano di chiudere l'applicazione 
analogamente a quanto avverrebbe con DoCmd.Quit con prompt senza terminarlo 
se non dopo un timeout impostabile.
Vorrei sapere se questa � la strada giusta.
Suggerimenti.
Grazie
Daniele

 Suggerimenti
certo...
il tuo problema � aggiornare le versioni del tuo software... perfetto...
io faccio cos�, da anni, e mi trovo egregiamente...
ho 2 mde, 1 che controlla le versioni (PRG1), 1 che � il vero software
gestionale (PRG2)
l'icona di avvio del software, contrariamente a quel che si pensa, invece
di avviare PRG2, avvia PRG1 per i motivi sotto riportati.
PRG1 ha particolari funzioni, ovvero : 
1) controllare se c'� disponibile on-line la versione "n+1" rispetto alla
"n" che � attiva sul PC...
2) nel caso ci fosse, scaricarla e renderla attiva (ovvero sostituirla
alla "n")
3) nel caso sia scaricata, eseguirla
4) ripetere il punto 1 finch� tutte le versioni "n+1" sono scaricate ed
eseguite
quelle che scarica, sono degli "EXE" che avviati, sostituiscono o
aggiungono i files che voglio
dopo aver eseguito tali funzioni faccio chiudere PRG1, e aprire PRG2, che
intanto � stato eventualmente sostituito (quindi aggiornato) da tutti gli
exe scaricati...
;)
capito?
-- 
Ciao
Pablitomf
----------------------------
http://www.accessgroup.it/
----------------------------
Non mi fido molto delle statistiche, perch� un uomo con la testa nel forno
acceso e i piedi nel congelatore statisticamente ha una temperatura media.
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 capito?
Grazie mille per la dritta.
Mi sembra che non altre scelte che creare un Updater esterno.
Qualcosa mi dice che nei exe che estraggono i file ci sia l'aggiornatore 
dell'Updater ;-)
Aspetto tue. Grazie.
Daniele


 Daniele
Intanto non capisco perchè ciclare tutti i Processi quanto il codice
SQL di cui dovresti essere un MAGO... supporta la WHERE CONDITION
nella quale puoi mettere il nome del Processo... e filtri solo
ACCESS...
Con quel codice li AMMAZZI TUTTI i processi ... fai attenzione.
In ogni caso quello che succede in questo caso è un dramma... supponi
che l'utente abbia il tuo MDE aperto ed un suo programmino MDB per i
conti famigliari... e supponi che il suo MsAccess sia il primo
nell'insieme... che fai ammazzi tutti gli Access aperti...??
Il tuo è un errore tecnico.
Hai a disposizione l'hWnd dell'istanza di Access usata dal tuo MDE,
con quell'hWnd ricavi il PID(process ID) e, se proprio lo uccidi
sempre con le API...
In quel modo non sbagli...!
Public Function GetPID(Byval hwnd as Long) as Long
        Dim Result
        Result = GetWindowThreadProcessId(hwnd, GetPID)
End Function
Es:
PID_MDE=GetPID(Application.hWndAccessApp)
hProcess = OpenProcess(PROCESS_TERMINATE, 0, PID_MDE)
TerminateProcess hProcess, 0&
Quello che non capisco è il motivo per il quale non fai un QUIT
dall'esterno usando l'automazione...
Il file che devi sostituire lo gestirai con un'applicaitvo ....?
A quell'applicativo lasci la getione del QUIT dell'attuale MDE, lo
rinomini, Copi il nuovo, lo apri e se non hai errori elimini il
vecchio, altrimenti ripristini...
Ti stai complicando la vita...?????
@Alex

 Daniele
Intanto non capisco perch� ciclare tutti i Processi quanto il codice
SQL di cui dovresti essere un MAGO... supporta la WHERE CONDITION
nella quale puoi mettere il nome del Processo... e filtri solo
ACCESS...
Con quel codice li AMMAZZI TUTTI i processi ... fai attenzione.
------------------- Hai ragione.  Grazie per il mago.
In ogni caso quello che succede in questo caso � un dramma... supponi
che l'utente abbia il tuo MDE aperto ed un suo programmino MDB per i
conti famigliari... e supponi che il suo MsAccess sia il primo
nell'insieme... che fai ammazzi tutti gli Access aperti...??
Il tuo � un errore tecnico.
Hai a disposizione l'hWnd dell'istanza di Access usata dal tuo MDE,
con quell'hWnd ricavi il PID(process ID) e, se proprio lo uccidi
sempre con le API...
In quel modo non sbagli...!
Public Function GetPID(Byval hwnd as Long) as Long
        Dim Result
        Result = GetWindowThreadProcessId(hwnd, GetPID)
End Function
Es:
PID_MDE=GetPID(Application.hWndAccessApp)
hProcess = OpenProcess(PROCESS_TERMINATE, 0, PID_MDE)
TerminateProcess hProcess, 0&
------------- Sicuramente � pi� corretto chiudere solo quello che serve!
Quello che non capisco � il motivo per il quale non fai un QUIT
dall'esterno usando l'automazione...
Il file che devi sostituire lo gestirai con un'applicaitvo ....?
A quell'applicativo lasci la getione del QUIT dell'attuale MDE, lo
rinomini, Copi il nuovo, lo apri e se non hai errori elimini il
vecchio, altrimenti ripristini...
Ti stai complicando la vita...?????
------------ Probabilmente s�.
@Alex
---------- Molte volte la quit non funge. E sono costretto ad assumere un 
killer.
Ovviamente il killer non garantisce che dopo l'assassinio l'.mde sopravviva 
intero.
L'obiettivo � quello ribadito da Pablitomf.
Per semplicit� l'mde concentra in s� tutta la gestione.
Compresa l'updater agent che esegue di tanto in tanto le verifiche di 
versione e procede in background (hidden e non) con il download (magari con 
un copyfileex con progress)
In seguito la sostituzione va fatta solo se:
- attuale si � chiuso realmente
- del old
- ren  attuale -> old
- ren new -> attuale
Pensavo di farlo con un vbs ed inserire uno script all'interno del vbs un 
update di una tabella che tiene traccia dei vari passaggi e dei vari errori.
Altrimenti se in errore
- del attuale
- ren old -> attuale
- start
?
Grazie

 dell'Updater ;-)
no... quello � sempre uguale... ed � esterno...
-- 
Ciao
Pablitomf
----------------------------
http://www.accessgroup.it/
----------------------------
Non mi fido molto delle statistiche, perch� un uomo con la testa nel forno
acceso e i piedi nel congelatore statisticamente ha una temperatura media.
questo articolo e` stato inviato via web dal servizio gratuito 


Non farei mai una cosa simile...!
Applicativo esterno in VB6 senza ombra di dubbio...
Non hai VB6... usa un Mde ma sempre esterno....!
@Alex


PRG2 per poter effettuare il download a questo punto non deve vericare se � 
necessario  scaricare un'altro exe?
Non lo faceva gia PRG1?
Perdona l'insistenza.


Grazie
Daniele 

 Perdona l'insistenza.
Dani� pensavo fossi meno addentro alla cosa, per cui te l'avevo fatta +
semplice... quindi adesso ti dico il processo per bene : 
Icona apre : PRG1
PRG1 esegue questi processi : 
1) verifica numero che compone il nome dell'ultimo file exe presente nella
cartella C:miopercorsoAttiva (Es. 100.exe)
2) verifica l'esistenza di files presenti nella cartella
C:miopercorsoUpload (Es. 101.exe)
3) nel caso in cui non vi siano files in C:miopercorsoUpload, vuol dire
che non sono stati scaricati aggiornamenti, per cui vuol dire che la
propria versione � l'ultima possibile...
4) nel caso in cui vi siano invece files in C:miopercorsoUpload, si cicla
la cartella, e file per file, si esegue, e sostituisce quello presente
nella cartella C:miopercorsoAttiva (dopo ogni esecuzione e sostituzione
nella cartella "Attiva", il file dalla cartella "Upload" viene
cancellato... e cos� fino all'utlimo file
(Come vedi "PRG1" non scarica nulla... ma applica solo i files scaricati
da altro processo)
PRG2 esegue oltre a tutti i processi da "GESTIONALE", anche un processo
UPLOADER in bg...
1) in maniera schedulata (un form resta aperto per tutta la durata della
sessione), verifica numero che compone il nome dell'ultimo file exe
presente nella cartella C:miopercorsoAttiva (Es. 100.exe) e aggiungendo 1
al valore numerico del nome (Es. 101.exe) verifica con un processo ad hoc,
se lo stesso sia presente nella cartella FTP preparata per tale scopo...
2) se non trova alcun file rispondente a quel nome, vuol dire che non ne
esistono di nuovi, e quindi finisce il processo
3) se lo trova, lo scarica e lo salva in C:miopercorsoUpload (cicla il
processo aggiungendo sempre 1 all'ultimo files salvato per vedere "quanti"
aggiornamenti il pc debba scaricare rispetto alla versione al quale �
fermo)
4) una volta finito il ciclo (ovvero quando non ne trova + on-line), d�
all'utente un messaggio di "RIAVVIO"
cos� facendo, si riavvia PRG1 che esegue tutto il processo di agiornamento.
Chiaro cos�?
-- 
Ciao
Pablitomf
----------------------------
http://www.accessgroup.it/
----------------------------
Non mi fido molto delle statistiche, perch� un uomo con la testa nel forno
acceso e i piedi nel congelatore statisticamente ha una temperatura media.
questo articolo e` stato inviato via web dal servizio gratuito 


 ha scritto nel messaggio 
news:h2d535$p0s$1...@news.newsland.it...

Pi� che chiaro. Meglio di un diagramma di flusso.
E' chiara la tempistica di chiusura, di apertura,  di download di 
aggiurnamento ecc.
Punto fermo quindi:
- chiusura a discrezione dell'utente
- decisamente aggiornatore esterno
Grazie per la disponibilit�
Daniele 

 ha scritto nel messaggio 
news:c74665fa-bb63-424c...@t21g2000yqi.googlegroups.com...

Sto affezionandomi all'idea di un aggiornatore esterno.
E' la soluzione pi� sensata e pi� stabile.
Con uno mde esterno ovviamente non c'� da paragonare con un vbs 
aggiornatore...
Grazie mille.
Daniele

 Daniele
PS IMPORTANTE
io non lego il numero del mio file exe al numero della versione... per me
le 2 cose sono indipendenti... cos� facendo nei miei exe ci metto quel che
mi pare... quindi magari anche solo una tabella BASE di BE... per� tu puoi
decidere diversamente ovviamente... per me � comodo fare cos�.
