Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34

    [Java] deleteOnExit su file in esecuzione

    Salve ragazzi, vi espongo il mio problema..
    Ho un programma che fa un certo tipo di operazione alla fine del quale cancella alcuni file..
    Trai file da cancellare c'è un exe cioè il programma principale... Su questo ho messo il deleteOnExit.. Tuttavia alla chiusura di tutto questo non viene cancellato... Sapete spiegarmi il motivo?

    Mi spiego meglio:
    Ho un exe, all'interno del quale ho un deleteOnExit dell'exe stesso.

    Un appunto: noto che dopo il termine del programma, se vado a vedere il task manager, il "platform se binary" rimane attivo.

    Sapete risolvere questo problema o avete suggerimenti?
    Ultima modifica di tuturo; 30-04-2014 a 15:25

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Al di là del fatto che questo tipo di applicazioni è molto dubbio (solitamente si usa per creare applicazioni malevole), direi che stai sbagliando approccio: il deleteOnExit() è un'indicazione che viene data alla JVM di cancellare un determinato file alla chiusura. E' ovvio che tale file non deve essere impegnato da qualcun altro per poter essere cancellato. Ora, il fatto che tu abbia un EXE in esecuzione significa che è il sistema operativo che lo tiene impegnato. Se anche questo EXE fosse un wrapper per un'applicazione Java, quel che accade è questo:

    codice:
    L'utente avvia l'EXE
    --> Sistema operativo apre l'eseguibile
       --> l'EXE avvia la JVM
          --> la JVM fa il suo lavoro
          --> Termina la JVM (che tenta di cancellare l'EXE, ma è ancora in esecuzione!)
       --> Termina l'EXE
    --> Il sistema operativo rilascia le risorse del EXE.

    Come vedi, la JVM non ha modo di cancellare il file poichè è quel file che l'ha avviata e che quindi è in esecuzione (impegnato) sul sistema operativo.


    Dovresti, comunque, spiegare perchè vuoi cancellare l'EXE che avvia l'applicazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    in pratica è un exe di installazione che mi crea un'albero di directory e mi crea il vero eseguibile dell'applicazione..
    Anche secondo me questo file può essere traanquillamente cancellato manualmente... Ma purtroppo alcune volte bisogna sottostare alle richieste del cliente

    Cmq molto chiara la tua spiegazione.. Ma in questo caso come posso dire a windows "rilascia il processo" e cancella il file???

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Con Java non lo puoi fare di sicuro, se non liberandoti dall'incombenza del EXE (ma è proprio necessario avere un EXE e perdere la portabilità?)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    Purtroppo no...

    Potrei generare un file .bat che lo fa? che ne dici?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Beh... se devi per forza avere un EXE, allora puoi creare un bat in questo modo:

    codice:
    @ECHO OFF
    NomeFile.EXE
    DEL /Q NomeFile.EXE

    Ma mi pare una cavolata... ti rimarrebbe comunque il BAT.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    lol è vero...
    e cmq non potrei richiamarlo nel codice perchè il file è ancora in esecuzione giusto?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ovviamente.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    34
    raga ho passato da exe a jar... ma la situazione non cambia!!!

    Il jar fa tutta l'installazione per bene e tutto il suo compito.
    L'ultima istruzione è :

    codice:
    File f = new File(System.getProperty("user.home") + "\\" + "Desktop" + "\\" +"app.jar");
    f.deleteOnExit();
    ricordo che f fa riferimento allo stesso file che richiama questo codice.

    Tuttavia il file non viene cancellato al termine dell'esecuzione.
    Suggerimenti?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.