Newsgroup: it.comp.lang.visual-basic
Titolo: Programma sempre in esecuzione

Salve a tutti, chiedevo un consiglio/parere.
La mia applicazione è un browser a gettoni, quindi dovrà girare su un
normale pc
con Win 98 e una gettoniera seriale. Il mio dubbio è: se per un problema di
IE si genera
un errore che chiude l'applicazione?
Allora la mia idea è di fare un "monitor" che vede se l'applicazione è
attiva e se non lo è
la lancia, ed essa sarà in grado di recuperare il suo ultimo stato, così
l'eventuale danno è limitato.
Per fare questo pensavo di creare un piccolo scambio dati fra le due
applicazioni, ma come?
Su file mi sembrava un po' villano, controllando il processo troppo
complicato... cosa consigliate?
Grazie, ciao
Andrea

Secondo me, quello che puoi fare è reperire l'URL che sta navingando
l'utente su IE (tramite API) e tenerlo in memoria nel tuo programma monitor.
Quando IE si spenge, allora lo riapri e rinavighi l'URL che hai memorizzato.
Cattiva come idea?

secondo me sě, perchč se č stato l'URL a far crashare IE, magari per la
presenza di applet Java, flash, dhtml.....
allora ti ritrovi con IE che si apre e si chiude all'infinito......
non so, non mi convince molto......
--
Damiani Liborio Igor
ig...@igordamiani.it
 - 
dam...@italiainfiera.it
 - 
idam...@hotmail.com
http://www.igordamiani.it
ICQ : 11847262


Assolutamente no, ed in più l'URL lo conosco già perchè il WEbBrowser è
dentro alla mia applicazione
quindi WEBBrowser.LocationUrl.
Il vero problema però è come monitorare la chiusura (in crash)
dell'applicazione per poi
rilanciarla...
Grazie mille
Ciao

 rilanciarla...
Devi usare una applicazioncina a parte, che verifica se l'applicazione
browser è attiva. Se non lo è, la attiva recuperando da qualche file di log
(che dovrai popolare durante la navigazione), l'ultimo url richiesto.
Se l'applicazione si chiude normalmente, e quindi non va riavviata, ad
esempio può scrivere nello stesso log 'chiusura normale'. Quando il monitor
in background vede che il browser è spento, ma nel log c'è questa stringa,
non esegue il riavvio.
Alberto

1) fai una nuova apllicazione che ti legge una chiave scritta nel registro e
che rimane sempre in memoria ..
2) fai partire il tuo browser .. che scrive questa chiave  quando siapre e
la cancella quando si chiude.
3) ad intervalli di tempo regolari controlli la chiave .. se è presente apri
il tuo browser nel caso fosse chiuso .. altrimenti nisba ..!!!
(è una soluzione veloce veloce .. non mi ci sono messo a pensarci molto ..
sorry!!!
--
 .. [t]Eo ..
|| TORNO SUBITO ||
" .. Sono fuori di testa. Tornerò tra cinque minuti .."
"Carta" <tat...@XXXXfreemail.it> ha scritto nel messaggio
news:b1vvqg$t5m$1...@grillo.cs.interbusiness.it...


 non so, non mi convince molto......
Magari potrei fermarmi al secondo crash consecutivo... ma il mio
problema rimane. Come accorgermi da un'altra applicazione che la
prima č andata in crash? In un modo "gestibile" ....
Grazie Ciao
Andrea

 ha scritto nel messaggio
news:bUL0a.91200$YG2.2...@twister1.libero.it...


 non esegue il riavvio.
Questo è quello che anch'io avevo pensato, il cuore della domanda era
proprio
qual'è un modo "intelligente" per capire se l'applicazione browser è andata
in crash...
Purtroppo, se non erro, quando la tua applicazione va in crash (es. perchè
hai un webbrowser
che va su una pagina che fa andare in crash IE), non ti viene sollevato
nessun evento
e vieni terminato. Da qui la necessità che "qualc'unaltro" si accorga che
sono andato
in crash e mi faccia ripartire. Quindi ripeto il punto focale:
Qual'è il modo migliore per monitorare una seconda applicazione per vedere
se non sia andata in crash?
Grazie infinite per ogni contributo...
CIao
Andrea

non sono molto d'accordo su questo modo di condurre la cosa......
è la prima volta che sento parlare di un'app che si saprà già che dovrà
crashare.....
:-(
mmhh......capisco il problema, ma non capisco la soluzione......
non solo, ci sono anche dei motivi pratici: quando un'app crasha, molto
spesso lascia su schermo un bel errore di protezione, una finestra in
popup.......
mah!!!!!
lo so che sembra impossibile, soprattutto nel caso di IE, ma la cosa più
bella è evitare che crashi.....
punto e basta.......
mah.....good coding!!!


 ha scritto nel messaggio
news:b20486$17tc4j$1...@ID-134521.news.dfncis.de...


 vedere se non sia andata in crash?
Quanto già postato è corretto.
Ti manca un solo passaggio, che però non è quello che tu chiedi. bensì:
"come faccio a sapere se una applicazione è attiva"?
Risolvendo questo, basta che la tua applicazione_2 controlli, ogni 5
secondi, se nell'elenco delle applicazioni attive c'è quella che vuoi tu,
altrimenti, e se nel log non c'è la chiusura standard, significa che è
andata in crash.
E qui, credo che ci sia una Api, ma non ricordo bene il nome. Comunque su
www.allapi.net
 c'è sia l'Api (qualcosa tipo GetSystemTask, GetTasks, o
qualcosa del genere), sia un progetto VB di prova pronto da usare.
Ciao
Alberto

no, calma......non ho mai detto che non sia possibile farlo......
ho detto solo che non mi piace.......
si fa un'app che non deve crashare!
non due app, la seconda delle quali deve controllare costantemente che la
prima non si blocchi o non crashi.......
tecnicamente so benissimo che si puň fare, ma non mi piace, tutto qua......
anche perchč molto spesso, per risolvere questo tipo di problemi, bisogna
riavviare,
oppure manipolare da qualche parte sul PC, e cosě via.....
insomma, č quasi dal punto di vista "etico" che non mi convince del
tutto......


 ha scritto nel messaggio
news:b20580$17vuvn$1...@ID-134521.news.dfncis.de...


beh, sě, allora sě......ma c'č qualcosa......che non.....
sě, dai.....vabbč!!!!
:-)))


 la cancella quando si chiude.
Il problema e se non si chiude correttamente e non riesce a scrivere la
chiusura...
Una possibile soluzione sarebbe che il browser scrive in questa chiave l'ora
ogni n secondi,
se il monitor vede che per n+1 secondi non viene aggiornata, capisce che
l'applicazione
è andata in crash.... però sto comunque fermo n secondi...
Cosa ne pensi? Anche in termini di stress di macchina avere tre o quattro
timer che pollano
chiavi di registro può essere una cosa pesante secondo te?
Grazie infinite
Ciao
Andrea

 Andrea


 mah.....good coding!!!
Su questo credo che nessuno possa dissentire, ma la domanda che ti pongo è
questa:
tu credi che un browser IE lasciato in mano ad utenti che lo useranno a
gettoni dentro
iun bar (visitando chissà quali siti...) possa avere impostazioni di
sicurezza tali da non
andare mai in crash per anni? ... se rinuci a tutto ciò che non è HTML forse
sì ma se solo
accetti i Flash...
E' comunque ovvio che si parla di casi di emergenza.... credo di aver già
"scremato" il 95%
di fonti di potenziali problemi....
Per quanto riguarda la finestrella con scritto l'errore, amen, se poi
riparte tutto è sopportabile
credo....
Grazie mille per il tuo contributo
Ciao
Andrea

 qualcosa del genere), sia un progetto VB di prova pronto da usare.
Ok, ALBE mi ha convinto e  mi permetto di postare il cuore della soluzione
al problema per i posteri (che magari useranno google) e avranno
il nostro parere su come monitorare un processo esterno....
Magari potrebbe anche finire sul sito comune... (e se c'era già mi taglio le
p...)
Ciao a tutti
Andrea
------------------------
Private Const TH32CS_SNAPPROCESS As Long = 2&
Private Const MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
  dwSize As Long
  cntUsage As Long
  th32ProcessID As Long
  th32DefaultHeapID As Long
  th32ModuleID As Long
  cntThreads As Long
  th32ParentProcessID As Long
  pcPriClassBase As Long
  dwFlags As Long
  szExeFile As String * MAX_PATH
End Type
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" _
Alias "CreateToolhelp32Snapshot" _
(ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" _
Alias "Process32First" _
(ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" _
Alias "Process32Next" _
(ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Sub ListaProcessi()
    Dim uProcess As PROCESSENTRY32
    Dim r As Long
    Dim hSnapShot As Long
    hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
    If hSnapShot = 0 Then
      Exit Sub
    End If
    uProcess.dwSize = Len(uProcess)
    r = ProcessFirst(hSnapShot, uProcess)
    Do While r
        nstr = uProcess.szExeFile
        cmbProcessi.AddItem nstr
        FullFileName = nstr
        r = ProcessNext(hSnapShot, uProcess)
    Loop
End Sub
Private Sub Form_Load()
ListaProcessi
End Sub

Scusa, ma una sorta di "ping" tra le due applicazioni non te gusta?
Apri su quella del browser una porticina.
L'applicazione di controllo gli manda un byte di controllo, quella browser
deve rispondere in echo.
Se non lo fa' entro n sec, =crash!
Semplice semplice, senza andare a smanettare sul registro.
Umbe
"Carta" <tat...@XXXXfreemail.it> ha scritto nel messaggio
news:b1vr3s$df4$1...@grillo.cs.interbusiness.it...


 taglio le p...)
Non credo.
Però credo che la tua versione non funzioni con NT.
Si dovrebbe usare EnumProcesses, e verificare all'avvio se il S.O. è NT o
meno.
Ma anche di questo c'è un progetto su 
allapi.net
, ne sono sicuro.
Ciao
Alberto

 Perň credo che la tua versione non funzioni con NT.
Prova questo:
www.pro-vision.it/download/client_monitor.zip
Ciao
Alberto

 
www.pro-vision.it/download/client_monitor.zip
molto carino grazie...
Ciao
Andrea