Hola.
Pienso que el problema se presenta por que Reg2Inf.exe no devuelve el control a la aplicación que lo invoca. Como te imaginas, me es imposible comprobarlo ya que ni siquiera sé que es lo que hace Reg2Inf.exe. Pero supongo que es una aplicación DOS. Si es así, quizá la prueba que realizé te pueda servir de algo.
Primero create 3 archivos de texto con algún contenido y llamalos ARCHIVO1.TXT, ARCHIVO2.TXT y ARCHIVO3.TXT. (En mi caso los situe en C:\TEMP)
Hacé un archivito de texto con el siguiente contenido:
Código:
@ECHO OFF
CLS
ECHO %1 %2
Guardalo como Reg2Inf.bat (en mi caso C:\'), lo único que hace es mostrar los parámetros enviados.
Luego desde Delphi:
Código Delphi
[-]
...
implementation
uses
ShellApi;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i:= 1 to 3 do
ComboBox1.Items.Add('C:\TEMP\ARCHIVO'+IntToStr(i)+'.TXT');
end;
procedure LlamarReg2inf(Hnd: THandle; const App:string; const Origen: string;
const Destino: string);
begin
ShellExecute(Hnd,
'OPEN',
PChar(App),
Pchar(Origen+' '+Destino),
PChar(ExtractFilePath(App)),
SW_SHOW); end;
function CambiarExt(Nom: string): string;
begin
SetLength(Nom, Length(Nom)-Length(ExtractFileExt(Nom)));
Result:= Nom+'.INF';
end;
procedure TForm1.btnExecAndStayClick(Sender: TObject);
var
i: Integer;
begin
for i:= 0 to ComboBox1.Items.Count -1 do
LlamarReg2Inf(Handle,'CMD', '/K C:\Reg2Inf.BAT '+ComboBox1.Items[i],
CambiarExt(ComboBox1.Items[i]));
end;
procedure TForm1.btnExecAndExitClick(Sender: TObject);
var
i: Integer;
begin
for i:= 0 to ComboBox1.Items.Count -1 do
LlamarReg2Inf(Handle,'CMD', '/C C:\Reg2Inf.BAT '+ComboBox1.Items[i],
CambiarExt(ComboBox1.Items[i]));
end;
end.
Como podrás comprobar funciona correctamente: Si enviás como parámetro '/K' muestra los nombres y queda en el command prompt y si envias '/C' hace lo propio y se devuelve el control.
Resumiendo, probá cambiando Reg2Inf.BAT por Reg2inf.EXE a ver que nos dice
Reg2Inf.exe ...
Un saludo.