Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Shellexecute con Parametros ... (https://www.clubdelphi.com/foros/showthread.php?t=77450)

ethangio 27-01-2012 02:13:57

Shellexecute con Parametros ...
 
Buenas tardes a todos ..

He estado buscando en los hilos del foro y en google alguna solucion a mi problema. Les agradezco de antemano su ayuda.

Les comento que no me funciona la funcion shellexecute al pasarle parametros nada mas no crea mi backup no me da ningun error
este es mi codigo .

Código Delphi [-]
var
  linea_mysqldump : String;
begin
  linea_mysqldump := '/c "'+ExtractFilePath(Application.ExeName)+'Data\bin\mysqldump.exe" --opt --user=root --password=holaroot  mibase > "'+ExtractFilePath(Application.ExeName)+'Backups\back.sql" ';
  ShellExecute(handle,'open', 'cmd.exe', PChar(linea_mysqldump), nil, SW_HIDE);

Si cambio ExtractFilePath(Application.ExeName) por C:\archivos de programa\aplicacion\ si hace mi backup ...
Alguna solucion que conozcan ?

ecfisa 27-01-2012 06:06:23

Hola ethangio.

¿ Revisaste que la función ExtractFilePath te esté devolviendo la cadena C:\archivos de programa\aplicacion\ ?

Si los valores son iguales y realiza la acción de una forma, tiene que realizarlo de la otra.

Para ver si el resultado de la composición de las cadenas es igual podés hacer, por ejemplo:
Código Delphi [-]
function ArmarCadena(const Cadena: string): string;
begin
   Result:= '/c "' +
            Cadena +
            ' Data\bin\mysqldump.exe" --opt --user=root --password=holaroot  mibase > "' +
            Cadena +
            'Backups\back.sql" ';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  Memo1.Lines.Add(ArmarCadena(ExtractFilePath(Application.ExeName)));
  Memo1.Lines.Add(ArmarCadena('C:\archivos de programa\aplicacion\'));
end;

Un saludo.

defcon1_es 27-01-2012 12:22:22

Hola. Como dice ecfisa, debes asegurarte que la ruta es igual en ambos casos.

Código Delphi [-]
var linea_mysqldump, ruta : String;
begin
  ruta := SysUtils.IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
  showmessage(ruta);
  linea_mysqldump := '/c "'+ruta+'Data\bin\mysqldump.exe" --opt --user=root --password=holaroot  mibase > "'+ruta+'Backups\back.sql" ';
  showmessage(linea_mysqldump);
  ShellExecute(handle,'open', 'cmd.exe', PChar(linea_mysqldump), nil, SW_HIDE);

Si no funciona, usa el debug de Delphi y comprueba el valor de la variable ruta y el de la variable linea_mysqldump

ethangio 27-01-2012 18:26:44

Gracias por sus comentarios .. Ya estuve checando como me dijeron y si es la misma ruta y todo ya lo cheque a detalle minusiosamente
y sigue igual, con las soluciones que me proporcionaron hace lo mismo ...

Conocen alguna manera de capturar el resultado del shellexecute al mandar el comando cmd con los parametros ?

por que yo pienso que en la funcion ExtractFilePath(Application.ExeName) hay algun caracter que causa que no se ejecute bien el comando a la hora de que se pasa como parametro a shellexecute PChar ... no se si me explique ...

Por que si ya lo hice ya cheque todo si escribo la ruta manual si hace bien el backup pero con la funcion ExtractFilePath(Application.ExeName) ya no ..

Seguiré buscando gracias

ethangio 27-01-2012 23:00:29

Ya va funcionando ... cambie de
ExtractFilePath(Application.ExeName) a ExtractFileDir(Application.ExeName) pero ahora no se por que no me guarda el archivo en

c:\archivos de programa\aplicacion\backups\

Por que si creo el archivo en c:\ si lo crea

Seguire buscando

ethangio 28-01-2012 00:25:56

Miren si yo pongo estas lineas si funciona

Código Delphi [-]
ruta := SysUtils.IncludeTrailingPathDelimiter(ExtractFileDir(Application.ExeName));

linea_mysqldump := '/c "'+trim(ruta)+'Data\bin\mysqldump.exe" --opt --user=root --password=holaroot  mibase > C:\mibackup.sql';

ShellExecute(handle,'open', 'cmd.exe', PChar(linea_mysqldump), nil, SW_SHOWNORMAL);

Pero si pongo el sig codigo
Código Delphi [-]
ruta := SysUtils.IncludeTrailingPathDelimiter(ExtractFileDir(Application.ExeName));

linea_mysqldump := '/c "'+trim(ruta)+'Data\bin\mysqldump.exe" --opt  --user=root --password=holaroot  mibase > "'+trim(ruta)+'\Backups\mibackup.sql"';

ShellExecute(handle,'open', 'cmd.exe', PChar(linea_mysqldump), nil, SW_SHOWNORMAL);
Ya no hace el backup, y me manda un error en la ventana de DOS, que dice : "C:\Archivos" no se reconoce como un comando interno o externo, programa o archivo por lotes.

Entonces quiero pensar que tengo problemas con las comillas no ? pero no se como solucionarlo.

ecfisa 28-01-2012 00:42:38

Hola ethangio.
Cita:

Ya va funcionando ... cambie de ExtractFilePath(Application.ExeName) a ExtractFileDir(Application.ExeName)
Con ExtractFilePath obtenés: C:\Program Files\aplicacion\ y con ExtractFileDir: C:\Program Files\aplicacion. Por lo que pareciera que te estuviese sobrando un / en el primer caso.

Otra cosa que se me ocurre es que mysqldump.exe no maneje nombres largos (es sólo un lance ya que no conozco la aplicación), en cuyo caso podrías convertirlos a cortos antes de utilizarlos:
Código Delphi [-]
function GetShortName(const FileName:string): string;
var
  ShortName: array[0..255] of char;
begin
  GetShortPathName(PChar(FileName), @ShortName, Length(ShortName));
  Result:= ShortName;
end;

Ejemplo de uso:
Código Delphi [-]
...
 linea_mysqldump := '/c "' + GetShortName(ExtractFileDir(Application.ExeName)) + ...

Un saludo.

ethangio 28-01-2012 01:16:50

Gracias .. gracias por su ayuda ...

ecfisa no utilice tu idea pero me diste otra buena ... Ya funciona :D

Código Delphi [-]
var
  linea_mysqldump, ruta : String;
begin
  ruta := SysUtils.IncludeTrailingPathDelimiter(ExtractFileDir(Application.ExeName));

  linea_mysqldump := '/c "'+trim(ruta)+'Data\bin\mysqldump.exe" --opt --user=root --password=holaroot  mibase > Backups\back.sql';

  ShellExecute(handle,'open', 'cmd.exe', PChar(linea_mysqldump), PChar(ruta), SW_SHOWNORMAL);
end;

Les agradezco por su tiempo y ayuda ... ecfisa y defcon1_es ...


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

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