He hecho un ejemplo en Delphi 6 para probar el concepto y funciona correctamente.
Dentro de un rato lo probaré en Delphi 11.
He hecho una aplicación que solo muestra el directorio en el que se ha lanzado.
Código Delphi
[-]
procedure TForm1.FormShow(Sender: TObject);
var
dir : string;
begin
dir := GetCurrentDir;
Caption := 'Directorio = ' + dir;
end;
Luego he hecho otra aplicación con un Edit (EArchivo) y un Botón (BEjecutar).
Código Delphi
[-]
uses ShellApi;
procedure TForm1.BEjecutarClick(Sender: TObject);
begin
AbrirArchivo(EArchivo.Text);
end;
procedure TForm1.AbrirArchivo(Archivo: string);
var
Resultado : word;
begin
Resultado := ShellExecute(Application.Handle, '' , PChar(Archivo), nil, PChar(ExtractFilePath(Archivo)), SW_SHOW);
case Resultado of
0: ShowMessage('El sistema operativo no tiene memoria o recursos suficiente.'); ERROR_BAD_FORMAT : ShowMessage('El archivo EXE es inválido.'); SE_ERR_ACCESSDENIED: ShowMessage('El sistema operativo denego el acceso al archivo especificado.'); SE_ERR_ASSOCINCOMPLETE: ShowMessage('El archivo asociado es incompatible o inválido.'); SE_ERR_DDEBUSY: ShowMessage('La transacción DDE no pudo completarse porque otra transaccion DDE estaba siendo procesada.'); SE_ERR_DDEFAIL: ShowMessage('La transacción DDE falló.'); SE_ERR_DDETIMEOUT: ShowMessage('La transacción DDE no pudo completarse porque ha expirado.'); SE_ERR_DLLNOTFOUND: ShowMessage('La librería dinamica especificada no se ha encontrado.'); SE_ERR_FNF: ShowMessage('El archivo no ha sido encontrado.'); SE_ERR_NOASSOC: ShowMessage('No hay ninguna aplicación asociada con la extensión del archivo dado.'); SE_ERR_OOM: ShowMessage('No ha habido memoria suficiente para completar la operación.'); SE_ERR_PNF: ShowMessage('No se ha encontrado la carpeta especificada.'); SE_ERR_SHARE: ShowMessage('Error de permisos.'); end;
end;
He copiado el ejecutable en diferentes directorios de la aplicación y los llamo escribiendo la ruta en en Edit.
Por ejemplo:
- Edit = "C:\Documents and Settings\Administrador\Mis documentos\Ejecutable1.exe"
- Pico sobre el botón Ejecutar.
- Ejecuta la aplicación y en su Caption pone "Directorio = C:\Documents and Settings\Administrador\Mis documentos\"
Si modifico la aplicación y quito el quinto parámetro pasando nil
Resultado := ShellExecute(Application.Handle, '' {'open'}, PChar(Archivo), nil,
nil, SW_SHOW);
- Edit = "C:\Documents and Settings\Administrador\Mis documentos\Ejecutable1.exe"
- Pico sobre el botón Ejecutar.
- Ejecuta la aplicación y en su Caption pone "Directorio = C:\Desarrollo\Pruebas\"
Pruebas.jpg