Как отправить оба параметра командной строки и paramstring с TShellExecuteInfo - PullRequest
0 голосов
/ 09 мая 2019

Я использую Delphi 6 (да, я знаю, но я старая школа).

У меня проблема с TShellExecuteInfo. Я хочу выполнить эту команду: C:\delphi\bin\Convert.exe -b-i плюс строка параметров (папка и имя файла).

Если я поставлю -b-i после Executeinfo.lpfile, то ShellExecuteEx() не сможет найти Convert.exe, а если я введу его в Paramstring, тогда Convert.exe не сможет найти файл.

Я потратил на это 3 дня, поэтому надеюсь, что вы поможете.

Кстати, почему Delphi вдруг начал сохранять мой файл как текст?

1 Ответ

3 голосов
/ 09 мая 2019

Вы не должны использовать ShellExecuteEx() для этого вообще. Эта функция предназначена для выполнения файлов документов, а не для запуска приложений. Вместо этого вы должны использовать CreateProcess(). Просто вставьте всю команду в ее параметр lpCommandLine, например:

procedure ConvertFile(const FileName: string);
var
  Cmd: string;
  Si: TStartupInfo;
  Pi: TProcessInformation;
begin
  Cmd := 'C:\delphi\bin\Convert.exe -b -i ' + AnsiQuotedStr(FileName, '"'); 

  ZeroMemory(@Si, Sizeof(Si));
  Si.cb := Sizeof(Si);

  if not CreateProcess(nil, PChar(Cmd), nil, nil, False, 0, nil, nil, Si, Pi) then
    RaiseLastOSError;
  try
    //...
  finally
    CloseHandle(Pi.hThread);
    CloseHandle(Pi.hProcess);
  end;
end;
...