如何在 Mac 版 Lazarus 中执行相当于
shellexecute()
的操作?
{ 这是执行此操作的代码。 使用 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 库是否已经封装了此功能,但如果没有,您可以使用 Launch Services 编程指南中的信息编写 ShellExecute() 的条件编译版本。
如果您想使用 ShellExecute 通过其首选应用程序打开文档,则可以使用 LCLIntf 单元中的 OpenDocument 过程。
Lazarus 转换工具也使用 ShellExecute 的替代品,请参阅 Lazarus wiki。在内部它使用 RobS 提到的 open。
fork 在 Mac 上很痛苦。 BSD 使用 vfork,而不是 fork。
我已经在 OS X 10.4 和 10.3 中成功使用了
Shell('open ' + Filename)
,它似乎对大多数文件类型都能很好地工作。
我在 shell 提示符下偶然发现了
open
,现在在 cygwin/linux 等中错过了它。