Rilasciare applicazione shell a fine esecuzione

Forum di discussioni su VB.Net (Visual Basic .Net)

Moderatore: Toki

Regole del forum
Leggi: IProgrammatori.it - Regolamento Forum
nickbi78
New Entry
Messaggi: 8
Iscritto il: 22 lug 2014, 11:42

Rilasciare applicazione shell a fine esecuzione

Messaggioda nickbi78 » 16 apr 2018, 07:37

Buongiorno a tutti,

ho il seguente codice in un eseguibile che si avvia con le utilità di pianificazioni windows:

Dim PrcProcesso As System.Diagnostics.Process()
Me.Hide()
Do
PrcProcesso = Process.GetProcessesByName("MSACCESS")
If (PrcProcesso.Length > 0) Then
PrcProcesso(0).Kill()
System.Threading.Thread.Sleep(300)
End If
Loop While (PrcProcesso.Length > 0)

Shell("rundll32.exe url.dll,FileProtocolHandler C:\dati\aggiorna.accdb", AppWinStyle.MaximizedFocus)
Close()

che a inizio esecuzione controlla che non ci siano processi MSACCESS in esecuzione, in caso ci siano li termina ed avvia un db che effettua delle operazioni e a termine operazioni effettua la compattazione del database visto che movimenta un numero elevato di dati.

Ha sempre fatto il lavoro in modo corretto ma sta capitando da un mesetto a questa parte che alla chiusura il db non viene rilasciato in tempo e quindi non riesce a chiudersi e di conseguenza a compattarsi restando appeso con un messaggio di errore che indica lo stato di compattazione non possibile...

come posso far si che l'eseguibile venga scaricato dalla memoria e rilasci il db prima della compattazione?

grazie!
oregon
Utente Senior
Messaggi: 10843
Iscritto il: 20 nov 2011, 18:54

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda oregon » 16 apr 2018, 08:19

Ogni quanto si avvia questo processo dallo scheduler?

Guarda che dei Kill del processo Access sono il miglior modo per corrompere il DB (anche in maniera irreparabile).
___________________
"Il gioco del Lotto : la tassa sull'imbecillità". (Bruno De Finetti, grande matematico italiano)
nickbi78
New Entry
Messaggi: 8
Iscritto il: 22 lug 2014, 11:42

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda nickbi78 » 16 apr 2018, 08:32

Si avvia ogni 45 minuti, la procedura completa dura circa 30 minuti,
il kill diciamo che non avviene quasi mai a meno che il db non si sia bloccato da qualche parte quindi i rischi sono quasi pari a zero.
oregon
Utente Senior
Messaggi: 10843
Iscritto il: 20 nov 2011, 18:54

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda oregon » 16 apr 2018, 09:01

E' possibile che le attività che partono con la Shell siano ancora attive quando il task riparte?

Sinceramente il meccanismo è abbastanza contorto e mi attenderei problemi del genere, poco prevedibili. Io non lo adotterei.
___________________
"Il gioco del Lotto : la tassa sull'imbecillità". (Bruno De Finetti, grande matematico italiano)
nickbi78
New Entry
Messaggi: 8
Iscritto il: 22 lug 2014, 11:42

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda nickbi78 » 16 apr 2018, 09:38

No, mi sono messo a monitorare visivamente il processo e termina nei tempi stabiliti, il db al 99% non si compatta poichè l'eseguibile vb non lo rilascia alla chiusura e quindi risulta in qualche modo bloccato... ho provato a sostituire l'esecuzione pianificata tramite batch msdos anzichè dall'eseguibile vb ed ho lo stesso problema...

c'è modo in vb di eseguire un file e poi farlo chiudere lasciando indipendenti i processi eseguiti?
purtroppo le operazioni pianificate di windows funzionano solo con file eseguibili, non posso lanciare il file accdb direttamente.
oregon
Utente Senior
Messaggi: 10843
Iscritto il: 20 nov 2011, 18:54

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda oregon » 16 apr 2018, 10:25

Se il processo vb termina il file deve essere rilasciato, hai controllato che l'eseguibile vb non sia per qualche motivo ancora in esecuzione?
___________________
"Il gioco del Lotto : la tassa sull'imbecillità". (Bruno De Finetti, grande matematico italiano)
nickbi78
New Entry
Messaggi: 8
Iscritto il: 22 lug 2014, 11:42

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda nickbi78 » 16 apr 2018, 11:03

Appena controllato, il processo si chiude nel momento in cui confermo con ok la maschera di errore di compattazione DB...
oregon
Utente Senior
Messaggi: 10843
Iscritto il: 20 nov 2011, 18:54

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda oregon » 16 apr 2018, 13:34

Ma quindi dopo la Close() cosa c'è? Come parte il programma VB e come dovrebbe terminare?
___________________
"Il gioco del Lotto : la tassa sull'imbecillità". (Bruno De Finetti, grande matematico italiano)
nickbi78
New Entry
Messaggi: 8
Iscritto il: 22 lug 2014, 11:42

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda nickbi78 » 16 apr 2018, 13:52

Il codice è esattamente quello nel post principale, ninte di più, niente di meno e rappresenta l'evento su apertura di una maschera impostata su hide all'apertura.
oregon
Utente Senior
Messaggi: 10843
Iscritto il: 20 nov 2011, 18:54

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda oregon » 16 apr 2018, 14:51

Non riesco a replicare il problema.
___________________
"Il gioco del Lotto : la tassa sull'imbecillità". (Bruno De Finetti, grande matematico italiano)
nickbi78
New Entry
Messaggi: 8
Iscritto il: 22 lug 2014, 11:42

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda nickbi78 » 16 apr 2018, 17:11

Trovato l'inghippo...
non dipende ne da vb ne dal SO.
Disattivando l'antivirus (Kaspersky 10 endopint security) il file viene rilasciato normalmente e si compatta alla chiusura.
domani provo a mettere l'app tra le esclusioni e vediamo che succede.
Grazie per il supporto!
oregon
Utente Senior
Messaggi: 10843
Iscritto il: 20 nov 2011, 18:54

Re: Rilasciare applicazione shell a fine esecuzione

Messaggioda oregon » 16 apr 2018, 17:33

Ecco mi sembrava strano... Meglio così
___________________
"Il gioco del Lotto : la tassa sull'imbecillità". (Bruno De Finetti, grande matematico italiano)

Torna a “VB.NET”

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti