Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   ayuda con ShellExecute con parámetro (https://www.clubdelphi.com/foros/showthread.php?t=90381)

vicvil 26-05-2016 23:53:34

ayuda con ShellExecute con parámetro
 
Por favor, necesito un poco de ayuda...
Tengo un pequeño programa de consola hecho en C# y necesito llamarlo desde delphi.
Este programa necesita le sea ingresado un parámetro y tengo problemas con la llamada, siempre me sale un error probando de distintas formas.
Estoy haciendo algo como lo siguiente:

Código Delphi [-]
ruta:= '/c ' + cRutaExe + 'Archivos\programa.exe ' + folio;
ShellExecute(Handle,'open',PChar('cmd'),PChar(ruta),nil,Sw_ShowMinimized);

(cRutaExe es la ruta hacia donde está el ejecutable de delphi, mientras que el programa C# está en la carpeta Archivo dentro de esa ruta y folio es el parámetro que requiere el programa)

Lo he hecho de distintas formas, a veces solo abre el cmd y no hace nada, otras abre el cmd en la carpeta cRutaExe, otras me manda error. He usado muchas veces el ShellExecute pero directamente para abrir programas ejecutables no a través de cmd.
La cosa es que necesito abrir cmd para poder ejecutar el programa de consola de c# y pasarle un parámetro, ¿cómo se puede hacer?
De antemano gracias.

ASAPLTDA 27-05-2016 03:05:24

[
Código Delphi [-]
ruta:= '/c ' + cRutaExe + 'Archivos\programa.exe ' + folio;
ShellExecute(Handle,'open',PChar('cmd'),PChar(ruta),nil,Sw_ShowMinimized);

Hola en que sistema operativo trabajas?
ruta:= '/c ' podria ser c:\ ??

vicvil 27-05-2016 14:57:52

Cita:

Hola en que sistema operativo trabajas?
ruta:= '/c ' podria ser c:\ ??
'/C' es una instrucción que se pasa a cmd para que ejecute algo

"cmd, /C programa.exe"

lo que hace es abrir cmd y la instrucción /C hace que se ejecute el programa y luego cierre el cmd

JOSEPE 27-05-2016 16:51:00

Asi?
 
Y asi?

Código Delphi [-]
  filename := 'c:\Archivos\programa.exe'; 
  parameters := 'folio'; 
  ShellExecute(handle,'open',PChar(filename), PChar(parameters),'',SW_SHOWMINNOACTIVE);

ecfisa 27-05-2016 19:05:17

Hola.

Desconozco el motivo de llamar al ejecutable desde el command shell y no directamente, pero de este modo me funciona correctamente:
Código Delphi [-]
procedure ExecuteByCMD(const FileExe, Params: string; const nShow: Integer);
const
  SPC = ' ';
begin
  ShellExecute(0,
               'open',
               'CMD.EXE',
               PChar('/C' + SPC + FileExe + SPC + Params),
               nil,
               nShow);
end;

Ejemplo de llamada:
Código Delphi [-]
begin
  ExecuteByCMD('C:\WINDOWS\NOTEPAD.EXE', 'C:\WINDOWS\WIN.INI', SW_SHOW);
...

Saludos :)

vicvil 27-05-2016 19:48:54

Al final logré realizar lo que necesitaba, lo hice de la siguiente forma:

Código Delphi [-]
ruta:= '/C programa ' + folio;
  ShellExecute(Handle,'open',PChar('cmd'),PChar(ruta),PChar(cRutaExe + 'Archivos'),Sw_ShowMinimized);


Cita:

Desconozco el motivo de llamar al ejecutable desde el command shell y no directamente
ecfisa me daba error abrirlo directamente, pero le volveré a dar una vuelta a eso a ver si puedo abrirlo directamente, pero ahora por lo menos ya me funciona.

Gracias


La franja horaria es GMT +2. Ahora son las 02:40:15.

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