Newsgroup: it.comp.programmare.win32
Titolo: Programma che si cancella dal disco alla chiusura

come da oggetto:come si può fare?

come da oggetto:come si può fare?
Recuperi dalla riga di comando il nome del programma in esecuzione e
durante il messaggio WM_CLOSE chiami DeleteFile .

durante il messaggio WM_CLOSE chiami DeleteFile .
Si può cancellare un exe in esecuzione?
-- 
                    Marco Barisione (ICQ 84277092)
Se sei interessato alla creazione di it.comp.lang (per i linguaggi di
programmazione senza un gruppo apposito e per i confronti fra i
linguaggi) partecipa alla discussione sul manifesto su it.news.gruppi.

 ha scritto nel messaggio
news:3bf55bd...@news.libero.it...

purtroppo non processo wm_close,è una dialogbox,però ho provato
così:
int APIENTRY WinMain(...........)
{
    DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG),
                       NULL, DlgProc) ;
    TCHAR buf[MAX_PATH+1];
    GetModuleFileName(hInstance,buf,MAX_PATH+1);
    DeleteFile(buf);
    return 0;
}
ma deletedile fallisce e getlas error mi dà come errore accesso negato.
la posizione in cui chiamo deletefile non dovrebbe fare differenza,no??

Si può cancellare un exe in esecuzione?
Altrimenti prima di chiudere il programma lanci un altro piccolo
programma che elimina il precedente (ma non credo convenga tanto)

programma che elimina il precedente (ma non credo convenga tanto)
E l'altro piccolo programma come si cancella?


 Si può cancellare un exe in esecuzione?
è quello che mi chiedo,gli unistaller come fanno?
il mio prog + o - dovrebbe fare una cosa del genere.

č quello che mi chiedo,gli unistaller come fanno?
A dire il vero non lo so, ma se puoi apettare il prossimo avvio di
windows con win9.x potresti usare wininit.ini. Anche se probabilmente
c'č una soluzione migliore (specialmente su un WinNT che deve restare
in esecuzione mesi senza essere riavviato).


 E l'altro piccolo programma come si cancella?
Con un terzo programma ancora piu` piccolo. E cosi` via finche` non si
arriva a dimensione zero. Ecco perche` e` utile far generare eseguibili
piccolissimi al Visual C++... ;-)
Scherzi a parte, non esistono metodi "ufficiali" per cancellare un
eseguibile in esecuzione. Devi istruire Windows a cancellarti l'eseguibile
al primo riavvio. Trovi tutte le istruzioni sull'help di MoveFileEx().
--
Lorenzo

 come da oggetto:come si può fare?
prima di chiuderti scrivi e lanci un bel file batch, con un ritardo
(tipo un dir della windows) e la cancellazione del programma e del batch
stesso  :)
grezzo ma funzionale
Ciao
Faber

 ha scritto nel messaggio
news:9t5ju7$136$1...@news.ngi.it...

Non so se sia necessario aggiungere qualche comando perdi tempo
per fare terminare l'eseguibile, comunque con un batch si riesce:
Alla fine dell'eseguibile lanci il batch cosi`:
WINAPI WinMain(HINSTANCE hInst, HINSTANCE h, LPSTR l, int n)
{
  MessageBox( NULL, "Executing", NULL, MB_OK );
  ShellExecute( NULL, "open", "cleaner.bat", 0, 0, SW_HIDE );
  return 0;
}
ed il file cleaner.bat e` questo:
@del prova.exe
@del cleaner.bat
ciao
Massimo

 in esecuzione mesi senza essere riavviato).
al file bat ci avevo pensato ma questo wininit.ini non lo conoscevo,grazie
per il suggerimento.(ci sono info su msdn?)


graie a tutti per i suggerimenti.
ciao.

per il suggerimento.(ci sono info su msdn?)
Guarda MoveFileEx come ha suggerito Lorenzo Lutti, č lě che ho trovato
delle informazioni su wininit.ini.


 @del cleaner.bat
Magari il batch te lo puoi scrivere te da dentro il tuo programma...in
questo modo resta tutto invisibile all'utente...
Ciao
        Riccardo

Si puň cancellare un exe in esecuzione?
No, ma puoi chiedere al S.O. cancellartelo al prossimo riavvio.
Vedi Help.
-- 
Tieni per te il Papero giusto se vuoi la mia email
Sito Papero -> 
http://utenti.tripod.it/papero

come da oggetto:come si può fare?
io farei cosi':
creo un thread remoto all'interno ad esempio di explorer o di un qualunque altro
eseguibile cui posso avere accesso, il quale thread attende di poter accedere al
file eseguibile... una volta che l'esecuzione del file eseguibile e' terminata
il thread "scroccone" se ne accorge lo cancella e termina.
1) funzionerà solo dove l'API CreateRemoteThread e' implementata
2) non funzionera' in Windows9x e affini
3) occorre trovare un eseguibile con i miei stessi privilegi cui attaccarmi 
   e che non muoia troppo presto
3) ci sono diverse cose che possono andare storte
allora la soluzione "migliore" e' chiedere a windos (non e' un errore :p)
che appena puo' te lo cancelli, cosi' sei sicuro che se il tuo thread
"scroccone-di-passaggi" fallisce, prima o poi quel file verra' cancellato
PS: circa il sapere quando cancellare il file
	1) potresti pollare (scusatemi :) con il createfile il file
       da cancellare, magari (e sottolineo magari ;) con un attimo di
       sleep e affini nel frattempo
    2) un mutex globale (forse la migliore soluzione)
la cosa carina e' che e' comunque un metodo che una volta implementato
potrai utilizzare in qualunque applicazione, in quanto il nome del file da
cancellare e il nome del mutex li puoi passare al thread come parametri.
magari preparati una bella classe che faccia tutto il lavoro...
saluti,
Francesco Picasso
http://francesco.netsigners.com

Si può cancellare un exe in esecuzione?
Oh yesss. Vabbè, prima va de-mappato dalla memoria, sennò c'è un handle 
che ti blocca, e ora non ricordo bene tutto il voodoo che c'era dietro. 
Comunque sì, in via teorica è possibilissimo
-- 
Nato nel vizio, morto nel supplizio
Nato nel peccato, ad entrare sia invitato