Как я могу выполнить эквивалент shellexecute () в Lazarus для Mac?

Как я могу выполнить эквивалент shellexecute() в Лазаре для Mac?

5 ответов


{ вот код для этого. Используйте объект TProcess! }

uses Process;

...

procedure DoProcess;
Var
  Proc : TProcess;

Begin
  Proc := TProcess.Create(nil);
  try
    Proc.CommandLine := '/Applications/MyApp.app';

    PRoc.Options := Proc.Options + [poWaitOnExit];
    Proc.CommandLine := Proc.CommandLine + ' -someparam';
    PRoc.Execute;
  finally
    Proc.free;
  end;  
End;

Я не знаю, имеют ли библиотеки Лазаря уже эту функциональность, но если нет, вы можете написать условно скомпилированную версию ShellExecute () используя информацию в Руководство По Программированию Служб Запуска.


Если вы хотите использовать ShellExecute для открытия документа с его предпочтительным приложением, то вы можете использовать процедуру OpenDocument из блока LCLIntf.

инструмент преобразования Лазаря также использует эту замену для ShellExecute, см. Lazarus wiki. Внутренне он использует open, как упоминалось RobS.


Я успешно использовал Shell('open ' + Filename) в OS X 10.4 и 10.3, который, кажется, работает достаточно хорошо для большинства типов.

я наткнулся на open в командной строке оболочки и теперь пропустите его в cygwin / linux и т. д.


вилка болит на Mac. BSDs использует vfork, а не вилку.