-1

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

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

如果我把它放在-b-i后面Executeinfo.lpfile然后ShellExecuteEx()找不到Convert.exe,如果我把它放在Paramstring后面Convert.exe就找不到文件。

我已经花了3天的时间,所以我希望你能帮助。

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

4

1 回答 1

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;
于 2019-05-09T04:20:51.657 回答