Rilasciare applicazione shell a fine esecuzione

di il
11 risposte

Rilasciare applicazione shell a fine esecuzione

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!

11 Risposte

  • Re: Rilasciare applicazione shell a fine esecuzione

    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).
  • Re: Rilasciare applicazione shell a fine esecuzione

    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.
  • Re: Rilasciare applicazione shell a fine esecuzione

    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.
  • Re: Rilasciare applicazione shell a fine esecuzione

    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.
  • Re: Rilasciare applicazione shell a fine esecuzione

    Se il processo vb termina il file deve essere rilasciato, hai controllato che l'eseguibile vb non sia per qualche motivo ancora in esecuzione?
  • Re: Rilasciare applicazione shell a fine esecuzione

    Appena controllato, il processo si chiude nel momento in cui confermo con ok la maschera di errore di compattazione DB...
  • Re: Rilasciare applicazione shell a fine esecuzione

    Ma quindi dopo la Close() cosa c'è? Come parte il programma VB e come dovrebbe terminare?
  • Re: Rilasciare applicazione shell a fine esecuzione

    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.
  • Re: Rilasciare applicazione shell a fine esecuzione

    Non riesco a replicare il problema.
  • Re: Rilasciare applicazione shell a fine esecuzione

    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!
  • Re: Rilasciare applicazione shell a fine esecuzione

    Ecco mi sembrava strano... Meglio così
Devi accedere o registrarti per scrivere nel forum
11 risposte