Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB.NET] Cancellazione eseguibile di update

    Salve,
    ho la necessità di far fare un aggiornamento, e cancellare il programma dell'aggiornamento dopo l'update.

    Non vorrei dover chiamare la shell, od altri eseguibili, è possibile fare tutto tramite codice?
    Ho tentato lanciando un thread diverso, ma mi restituisce un errore

    Sub Main
    Dim myThread As System.Threading.Thread = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf Aggiorna))
    myThread.Start()
    Me.Close()
    End Sub

    Private Sub Aggiorna()
    Thread.Sleep(5000)
    Try
    Dim di As IO.DirectoryInfo = New IO.DirectoryInfo(My.Application.Info.DirectoryPath )
    For Each File As IO.FileInfo In di.GetFiles()
    File.Delete()
    Next
    Catch ex As Exception
    MsgBox(ex.Message + vbCrLf + ex.StackTrace)
    End Try


    End Sub

    Grazie a tutti coloro vorranno aiutarmi, a presto

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Come regola di base, non puoi cancellare il file eseguibile in fase di esecuzione, poiché risulta (giustamente) bloccato dal sistema operativo.

    Quello che potresti prevedere è l'uso di due programmi: uno di update che viene eseguito per fare l'aggiornamento, chiudendo il programma principale, e al termine dell'aggiornamento lanciare un terzo programma di cleanup che effettua un consolidamento eliminando l'update e rilanciando il programma principale.

    In breve, fai un po' il "gioco dei tre cappelli" evitando di incappare nella condizione tale per cui il programma tenta di eliminare se stesso durante l'esecuzione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Quote Originariamente inviata da alka Visualizza il messaggio
    Come regola di base, non puoi cancellare il file eseguibile in fase di esecuzione, poiché risulta (giustamente) bloccato dal sistema operativo.

    Quello che potresti prevedere è l'uso di due programmi: uno di update che viene eseguito per fare l'aggiornamento, chiudendo il programma principale, e al termine dell'aggiornamento lanciare un terzo programma di cleanup che effettua un consolidamento eliminando l'update e rilanciando il programma principale.

    In breve, fai un po' il "gioco dei tre cappelli" evitando di incappare nella condizione tale per cui il programma tenta di eliminare se stesso durante l'esecuzione.

    Ciao!
    Mi rendo conto, e ti ringrazio per la risposta, certamente seguirò il tuo consiglio.

    Ma essendoci un processo a parte, che gira in Ram, non è possibile forzare in alcun modo il processo padre, e cancellare l'eseguibile?
    E' giusto per curiosità accademica, mi disturba non riuscire a fare questa cosa

  4. #4
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,994
    Non mi risulta che esista alcuna applicazione che fa quello che chiedi, però se ne conosci qualcuna sei pregato di segnalarla

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da lunarossa82 Visualizza il messaggio
    Ma essendoci un processo a parte, che gira in Ram, non è possibile forzare in alcun modo il processo padre, e cancellare l'eseguibile?
    E' giusto per curiosità accademica, mi disturba non riuscire a fare questa cosa
    Il processo gira in RAM nella misura in cui il sistema operativo ritiene utile caricarlo tutto o in parte.

    Magari un modo per aggirarlo c'è, ma richiede una programmazione a basso livello (probabilmente uscendo dall'ambiente .NET), e non è detto che questo venga segnalato come comportamento anomalo.

    Vi sono anche antivirus in grado di rilevare questi comportanti in anticipo bloccando addirittura a priori l'esecuzione.

    In breve, non la vedo una soluzione buona per esigenze di business. Per curiosità accademica, probabilmente richiede competenze di un certo tipo che almeno io non ho, e non so se vale la pena perderci così tanto tempo, ma in quel caso presumo sia più divertente che sia tu a scoprire il "come", piuttosto che fartelo dire.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.