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