ejecutar sincronamente un archivo bat

Iniciado por CeLaYa, 28 Septiembre 2006, 18:30 PM

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

CeLaYa

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??
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

Snort

   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

BenRu

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  ;)

Mad Antrax

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 ;)
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

CeLaYa

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
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

BenRu

Se hace con Shell()

Shell("C:\calc.exe")

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

CeLaYa

 :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
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

CeLaYa

me comentaron que hay una dll, que hace eso, alguien sabe cual es?
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

<--v1c1ous-->

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:

CitarFunction 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


CeLaYa

ya lo probe y funciono muy bien, GRACIAS!!!!!
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.