Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: CeLaYa en 28 Septiembre 2006, 18:30 pm



Título: ejecutar sincronamente un archivo bat
Publicado por: CeLaYa en 28 Septiembre 2006, 18:30 pm
Hola, estyo haciendo un programa en el que utilizo algunos archivos .bat, los mando llamar con la instruccion Shell, pero los ajecuta asincronamente

Shell App.Path & "\respaldo.bat", vbNormalFocus


hay alguna manera de hacer que mi programa espere hasta que el archivo bat termine su ejecución??


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: Snort en 28 Septiembre 2006, 20:45 pm
   Seguramente no, lo veo difil vamos alomejor con alguna api de estas raras... no creo, pero si el archivo .bat no interacciona con el usuario siempre puedes ponerle un timer antes de abrir el siguiente .bat


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: BenRu en 28 Septiembre 2006, 20:57 pm
Una forma sencilla es poner un timer o sleep.

Tambien puedes hacer que cuando termine el batch, este cambie la barra de titulo...y vb al detectar que la barra de titulo de la ventana es "Batch terminado", pues pasa a la siguiente accion  ;)


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: Mad Antrax en 28 Septiembre 2006, 23:40 pm
La pregunta es... ¿no puedes poner las instrucciones que hace el bat dentro del propio programa?

Cuentanos un poco más tu caso a ver si encontramos otra alternativa ;)


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: CeLaYa en 28 Septiembre 2006, 23:50 pm
la verdad es que el bat lo que hace es comrimir un archivo, no se como hacerlo desde VB por eso opte por hacer un bat que se encargara de eso

El archivo bat contiene lo siguiente:

@Echo off
c:\archiv~1\winzip\winzip32.exe -a -r C:\DOCUME~1\ocelaya\MISDOC~1\INDICA~1\Respaldo28092006.zip C:\DOCUME~1\ocelaya\MISDOC~1\INDICA~1\Respaldo28092006.bak


se que se puede hacer en VB pero no se como


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: BenRu en 29 Septiembre 2006, 00:05 am
Se hace con Shell()

Shell("C:\calc.exe")

Pd: No hace falta que utilices @echo off, ni exit.


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: CeLaYa en 30 Septiembre 2006, 16:04 pm
 :huh: el problema de la instrucción shell es que ejecuta el archivo en forma asincrona y lo que necesito es esperar a que termine de comprimir el archivo para poder continuar


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: CeLaYa en 3 Octubre 2006, 21:25 pm
me comentaron que hay una dll, que hace eso, alguien sabe cual es?


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: <--v1c1ous--> en 3 Octubre 2006, 21:44 pm
Claro que existe.
Acordate que cualquier *.bat ejecuta desde una consola de DOS :).
Por Ejemplo en WinXP el batch ejecuta junto el el cmd.

Uso Pausa porque el sleep es horrendo, con pausa puedo seguir tranquilamente con otras funciones sin problemas, hace una pausa a la siguiente linea pero solo dentro de la funcion.

Citar
'PROCESOS
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
'PAUSA
Private Declare Function GetTickCount Lib "Kernel32.dll" () As Long

Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400

'FUNCION DE SLEEP PARA ESPERAR UNOS MILISEGUNDOS
Sub Pausa(HowLong As Long)
    Dim u%, tick As Long
    tick = GetTickCount()
    Do
      u% = DoEvents
    Loop Until tick + HowLong < GetTickCount
End Sub

Y aca la funcion en concreto:

Citar
Function ExeEspera(COMANDO as String)
    Dim hProcess As Long
    Dim RetVal As Long
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(COMANDO, vbMinimizedNoFocus))
    Do
        GetExitCodeProcess hProcess, RetVal
        DoEvents
        Pausa 100
    Loop While RetVal = STILL_ACTIVE
End Function


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: CeLaYa en 3 Octubre 2006, 21:58 pm
ya lo probe y funciono muy bien, GRACIAS!!!!!


Título: Re: ejecutar sincronamente un archivo bat
Publicado por: Meg en 3 Octubre 2006, 22:03 pm
Mira aqui te dejo un code para comprimir un archivo desde vb (Muy util para hacer worms xDD )
Código:
Dim Rutaexe As String
Dim Rutazip As String
Rutazip = "C:\ & "nombre" & ".zip"
Rutaexe = "C:\tu_aplicacion.exe"
Shell ("C:\Archivos de programa\Winrar\WinRar.exe a -m5 -ep " & Rutazip & " " & Rutaexe) 'se ejecutara el winrar y es comprimira el archivo tu_aplicacion.exe como nombre.zip
Shell ("C:\Archivos de pograma\Winzip\Winzip32.exe -a" & Rutazip & "" & Rutaexe) 'igual que el anterior pero lo hara con el winzip en vez de el winrar