如何使用TShellExecuteInfo发送命令行开关和参数字符串

时间:2019-05-09 03:46:29

标签: delphi delphi-6 shellexecuteex

我正在使用Delphi 6(是的,我知道,但是我是老学校)。

我对TShellExecuteInfo有疑问。我想运行以下命令:C:\delphi\bin\Convert.exe -b-i加上一个参数字符串(文件夹和文件名)。

如果我将-b-i放在Executeinfo.lpfile之后,则ShellExecuteEx()找不到Convert.exe,如果我将其放在Paramstring中,则{{1 }}找不到文件。

我已经花了3天时间,希望您能帮上忙。

顺便说一句,为什么Delphi突然开始将我的文件另存为文本?

1 个答案:

答案 0 :(得分:3)

您完全不应为此使用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;