Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Como eliminar el archivo ejecutado?

Estas en el tema de Como eliminar el archivo ejecutado? en el foro de Visual Basic clásico en Foros del Web. Hola a todos; Necesito conseguir que un programa hecho en visual basic se elimine a si mismo. Intenté poner kill "ruta_de_este_mismo_exe" pero no funcionaba. Busqué ...
  #1 (permalink)  
Antiguo 03/10/2009, 17:35
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Como eliminar el archivo ejecutado?

Hola a todos;

Necesito conseguir que un programa hecho en visual basic se elimine a si mismo.

Intenté poner kill "ruta_de_este_mismo_exe" pero no funcionaba.

Busqué por internet y sólo ví que habia que hacer que se ejecutase un .bat o algo así.

¿Cómo hago para que el programa se elimine a si mismo?
  #2 (permalink)  
Antiguo 04/10/2009, 04:18
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Como eliminar el archivo ejecutado?

Da la impresión de que estás creando un virus o troyano.

En fin, esto es un foro de programación VB, y como eso que pides se puede necesitar para cosas no necesariamente malas, os voy a dejar aqui una subrutina para conseguir ese resultado.

Como bien dices, la forma más popular de hacer algo así sería mediante un BAT, de modo que me voy a limitar a eso, aunque lo haré lo mejor que sepa.

Si buscas una mejor solución, por mi parte solo puedo recomendarte que busques en foros de hackers y creadores de virus, etc...

Esta es mi solución, una sub llamada KillMe.

La meteis en un Module del programa a borrar y la ejecutais antes de cerrar el programa, como por ejemplo en el evento QueryUnload.

Código :
Ver original
  1. Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
  2. (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
  3. ByVal lpParameters As String, ByVal lpDirectory As String, _
  4. ByVal nShowCmd As Long) As Long
  5.  
  6. Sub KillMe()
  7.   Dim MiExe As String
  8.   Dim FicheroBAT As String
  9.   Dim numFichero As Integer
  10.  
  11.   On Local Error Resume Next
  12.  
  13. ' PREPARAMOS EL NOMBRE DEL BAT,
  14. ' QUE SERA CREADO EN LA CARPETA TEMPORAL
  15.   If Right$(Environ("temp"), 1) = "\" Then
  16.     FicheroBAT = Environ("temp") & "kll.bat"
  17.   Else
  18.     FicheroBAT = Environ("temp") & "\kll.bat"
  19.   End If
  20.  
  21. ' CREAMOS EL BAT
  22.   numFichero = FreeFile
  23.   Open FicheroBAT For Output As #numFichero
  24.     Print #numFichero, "@echo off"
  25.     Print #numFichero, ":p1"
  26.     Print #numFichero, "attrib -h -s -r %1"
  27.     Print #numFichero, "del %1 >> nul"
  28.     Print #numFichero, "if exist %1 goto p1"
  29.   Close #numFichero
  30.  
  31. ' PREPARAMOS EL NOMBRE DEL EXE A BORRAR
  32. ' EN ESTE CASO EL DEL PROPIO PROGRAMA
  33.   If Right$(App.Path, 1) = "\" Then
  34.     MiExe = App.Path & App.EXEName & ".exe"
  35.   Else
  36.     MiExe = App.Path & "\" & App.EXEName & ".exe"
  37.   End If
  38.  
  39.   ' LANZAMOS EL BAT BORRADOR
  40.   ShellExecute Form1.hwnd, "open", FicheroBAT, MiExe, "", vbHide
  41.   ' SE DA POR SUPUESTO QUE TIENES UN FORM LLAMADO FORM1.
  42.   ' SI NO ES ASÍ, CAMBIA "FORM1.HWND" POR "ELNOMBREDEUNFORMULARIO.HWND"
  43.  
  44.   ' CUANDO CERREMOS ESTE PROGRAMA, EL EXE
  45.   ' SERÁ ELIMINADO.
  46.   ' SOLO QUEDARA EL BAT DE LA CARPETA TEMP.
  47.  
  48.   On Local Error GoTo 0
  49. End Sub

Espero que os guste.

Última edición por pkj; 04/10/2009 a las 06:02
  #3 (permalink)  
Antiguo 04/10/2009, 04:22
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Como eliminar el archivo ejecutado?

No prejudges, estoy creando un programa para encriptar todos los archivos subcarpetas que hay en una carpeta y meterlo todo encriptado en un único archivo.

El encriptador se elimina cuando ya se ha encriptado.

Muchas gracias por el código, probaré aver...
  #4 (permalink)  
Antiguo 04/10/2009, 04:28
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Como eliminar el archivo ejecutado?

Era un simple comentario.
Ya digo que se puede usar para cosas no necesariamente malas, por eso he puesto el código.

Saludos
  #5 (permalink)  
Antiguo 04/10/2009, 05:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Como eliminar el archivo ejecutado?

Perdona esque soy muy nuevo en esto del VB...

Da error donde dice Me.hwnd en la linea 40...

¿a que se debe?
  #6 (permalink)  
Antiguo 04/10/2009, 05:59
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Como eliminar el archivo ejecutado?

Perdona mi despiste, ya que en principio estaba diseñado para usarse en el Form1.

Cambia me.hwnd por Form1.hwnd o el nombre de uno de tus formularios en lugar del Form1 y debe funcionar.

Voy a hacer el cambio también en el código.

Sorry
  #7 (permalink)  
Antiguo 04/10/2009, 09:44
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Como eliminar el archivo ejecutado?

Hola, aca tenes otro ejemplo que no necesita crear un .bat en el disco:

Melt

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #8 (permalink)  
Antiguo 04/10/2009, 10:34
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Como eliminar el archivo ejecutado?

Es curioso. Pensé que la única manera sería cargar una sub en memoria de algún modo que no se descargue al cerrar el programa, como vi hace muchos años que funcionaban los virus.

Imagino que el meollo de la cuestión está en que el comando WinExec funciona de ese modo, aparte del programa que lo usa, y cuando se cierra este, WinExec sigue ejecutandose como un bat externo, ya que se le envian todos los comandos seguidos.

El caso es que mirando el código, no llego a entender cual es su verdadera función, ya que, parece ser que aparte de eliminar el ejecutable, previamente lo copia en otro sitio, y después de eliminarlo ejecuta la copia. Me parece extraño. Creo que en realidad es algo como un modo de cambiar de sitio el programa y ejecutarlo a continuacion desde su nueva ubicación.

Voy a probarlo, y si es como yo pienso, haré los cambios oportunos para que se convierta en la función que estamos buscando y la publicaré.
  #9 (permalink)  
Antiguo 04/10/2009, 11:37
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Como eliminar el archivo ejecutado?

Pues nada. Tengo que decir que la función que señala seba123neo, a mí no me funciona.

He probado todas las combinaciones que se me han ocurrido y no he conseguido que funcione en absoluto.

Ni copiar nada ni eliminar nada.

Prueba tras prueba el resultado siempre era el mismo. El ejecutable seguía obstinadamente presente en la carpeta en que lo había creado y de la copia que pensaba que se crearía, ni huella.

Ni con tiempo de espera ni sin el. Ni cerrando la aplicacion ni dejandola abierta.

Ni usando Shell o ShellExecute en lugar de WinExec.

Eso si, ahora que lo miro, tengo en memoria cargados 12+1 "cmd.exe".
Imagino que han sido las pruebas que hecho usando COMSPEC.

Si a alguien le funciona que nos cuente como lo ha hecho.

Un saludo

Última edición por pkj; 04/10/2009 a las 11:48
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:18.