Borrar ejecutable en proceso!

Iniciado por dooque, 16 Diciembre 2010, 18:16 PM

0 Miembros y 1 Visitante están viendo este tema.

dooque

Wenas!

Mi pregunta de hoy es si alguien sabe (si es que se puede) como borrar un archivo ejecutable desde el mismo proceso generado por ese ejecutable.
Por ejemplo tengo mi programa test.exe y quiesiera que cuando lo ejecute él borrara su propio archivo ejecutable.

Pregunto esto porque de la manera usual no se puede, el sistema no te deja y a lo mejor alguien sabe/conoce/existe alguna API que me permita hacer eso!

Saludos!

Gonzalo.
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.  -- Kernighan

winroot

Buenas!
Me imagino que no te deja por que el archivo ya está en uso.
Bien, tal vez me equivoque, pero podrías hacer un segundo ejecutable.
Llamas al segundo ejecutable desde el primero, usando CreateProcess o lo que sea, y luego se cierra.
El ejecutable b espera por unos segundos, elimina el ejecutable a, y luego se cierra.
Incluso puedes usar fstreams y escribir un script js/vbs que haga la tarea.
Repito, capáz que no es la mejor solución, además de que supongo que estás en windows.
Un abrazo.
Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com

Littlehorse

No se puede borrar el ejecutable mientras se encuentre en ejecución. Se pueden hacer otras cosas como iniciar un proceso secundario que sincronice con el ejecutable principal y lo borre terminada su ejecución. El efecto es el mismo y es por demás la solución mas sencilla.

Si reiniciar es una opción, podes usar MoveFileEx con el flag MOVEFILE_DELAY_UNTIL_REBOOT:

CitarIf dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT and lpNewFileName is NULL, MoveFileEx registers the lpExistingFileName file to be deleted when the system restarts. If lpExistingFileName refers to a directory, the system removes the directory at restart only if the directory is empty.
Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

dooque

Muy bien! Muchas gracias!

Si, ya tengo varias soluciones alternativas a mi problema vastante viables y no tan oscuras, solo queria asegurarme que no habia otra forma de hacerlo mejor!

Salduos!
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.  -- Kernighan