tagspace tag portable online mac files español and windows file process

windows - portable - tag folders



¿Cómo puede un programa eliminar su propio ejecutable? (7)

¿Hay alguna forma de que un proceso en ejecución pueda eliminar su propio ejecutable?

Por ejemplo, hago una aplicación de consola (solo exe) y después de hacer algunas tareas de alguna manera elimina el archivo exe.

Tengo que enviar un solo archivo a alguien. Y quiero que se elimine después de que realiza su tarea prevista.

¿Hay alguna forma de hacerlo en Windows?


Es posible hacer esto en Linux. Descubrirá que generalmente no es posible eliminar un archivo ejecutable en ejecución en Windows. Sin embargo, puede hacer que Windows elimine el EXE el próximo reinicio: http://www.howtodothings.com/computers/a1402-delete-a-running-exe.html

Si desea que el archivo se elimine después de que se haya ejecutado, simplemente puede pedirle al usuario que lo elimine. Si la razón por la que quiere esto es como una medida de seguridad, entonces lo que está haciendo está mal orientado. El usuario podría eludir esto simplemente haciendo una copia del archivo primero.


Hasta que ese exe esté en la memoria, no podrá eliminarse a sí mismo. Sin embargo, puede registrar en el sistema una tarea para borrarse después de un período de tiempo establecido de intervalo en el que se espera que complete su ejecución.


Puede ejecutar otra aplicación, que esperaría a que finalice el proceso principal, y luego eliminar su ejecutable.



Resolví este problema (usando Visual Basic) al crear un archivo por lotes que se ejecuta mientras el proceso aún se está ejecutando, espera 1 segundo para que el programa pueda cerrarse y luego eliminar el programa.

Es posible que deba modificarlo, ya que esto borrará todo en la misma carpeta. Después de su tarea simplemente llame a del() y debería funcionar.

Sub del() Dim file As System.IO.StreamWriter file = My.Computer.FileSystem.OpenTextFileWriter("del.bat", True) file.WriteLine("") file.WriteLine("timeout 1") file.WriteLine("echo Y | del *.*") file.Close() Process.Start("del.bat") Me.Close() End Sub


Una forma de hacerlo es usar la función MoveFileEx con el indicador MOVEFILE_DELAY_UNTIL_REBOOT y un destino NULL . De acuerdo con la documentación, esto:

registra el archivo lpExistingFileName que se eliminará cuando el sistema se reinicie. Si lpExistingFileName se refiere a un directorio, el sistema elimina el directorio al reiniciarlo solo si el directorio está vacío.


process.start("cmd /c ping localhost -n 3 > nul & del filepath") exit

reemplace el proceso. comience con cualquier comando que use su lenguaje de programación para iniciar programas con argumentos

reemplace filepath con la ruta a su exe

reemplace la salida con el comando para terminar su programa