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

Как я могу выполнить аналог shellexecute() в Lazarus для 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;

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

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

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

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

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

Я наткнулся open на приглашение оболочки и теперь пропускаю его в cygwin / linux и т. Д.