Ver Mensaje Individual
  #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, 10 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