Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con ejecucion de linea de comandos (https://www.clubdelphi.com/foros/showthread.php?t=73001)

MaxiDucoli 25-03-2011 03:26:21

Ayuda con ejecucion de linea de comandos
 
Hola, como están? .
Los molesto por que tengo un problema desde hace 3 días y no puedo solucionarlo con nada. :(

Les cuento:
Estoy haciendo un programa que es un FrontEnd entre una aplicacion de linea de comandos llamada POPSTATION.EXE ( es un programa que te transforma las ISOS de PlayStation en ISOS para jugarlas desde la PSP) y la cargo en un TJvCreateProcess.

En este programa ejecuto muchos bat, por que no solo hace eso, sino que tambien usa otros programitas desde linea de comandos (popstrip.exe, que descomprime isos de psp ya comprimidos con popstation.exe, Ciso.exe que transforma las ISO en CSO y daxcr.exe que transforma los ISO en dax, fffmpeg para cargar sonido y transformarlo en wav) pero mi problema esta en el popstation.exe y es el siguiente:

Hago un TStringList y le cargo los datos ahi

que son estos:
Código Delphi [-]
  Lst := TStringList; // Declaro la lista
  Lst := TStringList.Create; // Creo la lista
  cmd := '"' + ExtractFilePath(ParamStr(0)) + 'PSX\popstation.exe" ' + '"' + Trim(EdtGameTitle.Text)  + '" ' + 
         Trim(EdtIDGame.Text) + ' 9 ' + '"' + Trim(EdtInFile.Text) + '"'; // Inserto los valores en una variable string
  Lst.Add(Trim(cmd)); // Agrego el String a la lista
  Lst.Add('Move /Y "' + ExtractFilePath(ParamStr(0))+ 'PSX\EBOOT.PBP" "' + ExtractFilePath(EdtInFile.Text)+ '"'); // Agrego otro String a la lista, que me mueve el archivo generado a la carpeta en donde lo necesito
  Lst.SaveToFile(ExtractFilePath(ParamStr(0)) + 'PSX\mke.bat'); // Salvo en bat
  Lst.Free; // Libero la lista

Después de todo esto, ejecuto el bat cargando el TJvCreatePRocess asi:

Código Delphi [-]
  Form1.Proceso.ApplicationName := ExtractFilePath(ParamStr(0)) + 'PSX\mke.bat';
  Form1.Proceso.Run;

Pero no anda.
Lo raro es que si ejecuto el Bat mediante doble click, ANDA PERFECTOOOOOO!!!!

Me estoy volviendo locooooooo!!

Probe cargando separadamente el ejecutable con las instrucciones y tampoco :(

Ya probe con todas las funciones y procedimientos que encontre por internet de ejecutar lineas de comandos y nada.... :(

Alguien me puede ayudar???

Se imaginan por que el BAT no es roconocido por mi aplicación ponga la función o procedimiento que le ponga?

Solo se abre la ventanita de DOS y se cierra como si hubiese puesto mal los comandos, pero al abrir el bat y probar con doble click anda lo mas bien. :(

Esto es lo que tiene el bat adentro.
Cita:

"D:\_Datos Importantes_\Mis Proyectos Delphi\PSPTool\PSX\popstation.exe" "Tomb Raider Chronicles" SLES03336 9 "D:\Temp\Tomb Raider Chronicles\Tomb RAider Chronicles.iso"
Move /Y "D:\_Datos Importantes_\Mis Proyectos Delphi\PSPTool\PSX\EBOOT.PBP" "D:\Temp\Tomb Raider Chronicles\"
Asi es tal cual como esta el BAT.
Si alguien me puede ayudar se lo agradeceré muchísimo. :)
Saludos! ;)

Neftali [Germán.Estévez] 25-03-2011 10:10:32

Prueba a cambiar la extensión por CMD.

Supongo que ya has probado a ejecutarlo con WinExec y ShellExecute (aquí en los foros puedes encontrar ejemplos de ambos).
¿Es así?
¿Mismo resultado?

AÑADO: Acabo de ejecutar esto desde un programa Delphi y funciona perfectamente:

Código Delphi [-]
  WinExec('c:\temp\Open Firefox.bat', 0);

MaxiDucoli 25-03-2011 12:15:58

Cita:

Empezado por Neftali (Mensaje 394634)
Prueba a cambiar la extensión por CMD.


Supongo que ya has probado a ejecutarlo con WinExec y ShellExecute (aquí en los foros puedes encontrar ejemplos de ambos).
¿Es así?
¿Mismo resultado?

AÑADO: Acabo de ejecutar esto desde un programa Delphi y funciona perfectamente:

Código Delphi [-]
  WinExec('c:\temp\Open Firefox.bat', 0);

Ah!! Ya probé lo de cambiar extensión y lo mismo..... :p La verdad es que esto es mas un desafío que una programa para un hobbie eh! no entiendo por que hace eso :D ja!


Hola, gracias por la respuesta.
En lo que al foro se refiere, ya probé con todo lo que encontré por los hilos :)
Probé con Winexec y ShellExecute también.
Le acabo de agregar una pestaña mas al programa y en ella convierto cualquier tipo de video con ffmpeg al formato PSP y el bat que genero anda perfectamente.
La verdad es que no se por que este no funciona.
Me está volviendo loco. :p
Una consulta:
Se puede hacer un "semiprogramita" en consola de delphi y desde este ejecutar ese bat? o es algo loco que daría el mismo resulta. De poderse; como se usa la consola de Delphi?? jaja!
Saludos! :)

Neftali [Germán.Estévez] 25-03-2011 13:09:23

Puedes probar otra cosa, a ver si adivinas cual es el error que genera.

Supongo que el problema radica en que no puede ver el error que genera el BAT cuando lo ejecutas desde delphi (puesto que desde fuera funciona).

Normalmente si desde la consola ejecutas esto:

Código:

c:\>  TEST.BAT >> Errores.txt
La salida de mensajes se guarda en ese fichero.

¿Puedes probar a añadir el ">>Errores.txt" a tu ejecución, a ver si genera algo?

Neftali [Germán.Estévez] 25-03-2011 13:19:56

Más cosas que puedes probar....

Si ejecutas algo así:

Código Delphi [-]
WinExec('c:\temp\Open Firefox.bat', SW_SHOW);

Deberías ver la consola; Fíjate que antes en lugar del SW_SHOW había un 0.
Algo más; He probado a poner comandos PAUSE, dentro del BAT y se detiene, por lo tanto podrás ver si se ejecuta (al menos).

Otra cosa que he probado es lanzar la llamada con esto:

Código Delphi [-]
  WinExec('"c:\_Sistema\Google Tools.bat" > Errores.txt', SW_SHOW);

Funiona y me genera el fichero Errores.txt con la salida. Podrás ver si da algun error.

MaxiDucoli 25-03-2011 14:09:58

Cita:

Empezado por Neftali (Mensaje 394642)
Más cosas que puedes probar....

Si ejecutas algo así:

Código Delphi [-]
WinExec('c:\temp\Open Firefox.bat', SW_SHOW);

Deberías ver la consola; Fíjate que antes en lugar del SW_SHOW había un 0.
Algo más; He probado a poner comandos PAUSE, dentro del BAT y se detiene, por lo tanto podrás ver si se ejecuta (al menos).

Otra cosa que he probado es lanzar la llamada con esto:

Código Delphi [-]
  WinExec('"c:\_Sistema\Google Tools.bat" > Errores.txt', SW_SHOW);

Funiona y me genera el fichero Errores.txt con la salida. Podrás ver si da algun error.

GENIO GENIO TA TA TA!!! Ja!
Muchas gracias che!!!
probando y probando me olvide de cerrar un cmd.exe y volvi a presionar el boton de ejecutar el bat con toda la bronca! jaja!
y pude leer en la ventana cmd (ya que lo ejecuto ahí) que el bat se me ejecutaba no desde donde estaba escrito el exe, que se me ponia algo asi:

D:\Temporal\Tomb Raider Chronicles\>"D:\_Datos Importantes_\Mis Proyectos Delphi\PSP Tool\Psx\popstation.exe" "Tomb Raider Chronicles" "SLESXXXXX" "9" "D:\Temporañ\Tomb Raider Chronicles\"


Lo único que hice fue agregar una linea al bat que dice:

CD "D:\_Datos Importantes_\Mis Proyectos Delphi\PSP Tool\Psx\"

Y LISTO!!! :)
Mande la linea de comandos a la carpeta del exe y aunque le indico la carpeta del exe ya en la instruccion no se por que quiere que la mande ahi, pero ya no importa por que funciona.
Te agradezco muchisimo por tu ayuda, ya que sin ella no hubiese visto el problema y todavia estaria arrancándome los pelos.

Muchas gracias!


La franja horaria es GMT +2. Ahora son las 10:51:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi