我有一个 Firemonkey 应用程序(Delphi Berlin 10.1)并希望从中启动外部程序。 (外部程序是帮助文件查看器。)
当我为 Win32 进行编译时,我可以简单地执行此操作(当外部程序与主可执行文件位于同一文件夹中时):
path := ExtractFilePath(ParamStr(0));
path := path + 'MyViewer.exe';
ShellExecute(0, 'open', PWideChar(path), nil, nil, SW_SHOWNORMAL);
当我为 OS X 进行编译时,我有 Mac 版本的外部程序 MyViewer.app。我把它放在哪里?如何将其放入 PAServer 创建的捆绑包中?需要什么代码才能启动它?
这显示了 Windows 和 OSX 的等效项:
uses
{$IFDEF MSWINDOWS}
winapi.shellapi
{$ENDIF}
{$IFDEF POSIX}
Posix.Stdlib
{$ENDIF POSIX}
;
function ExecuteFile(const filename, Params, DefaultDir: string;
ShowCmd: integer): THandle;
begin
{$IFDEF MSWINDOWS}
result := ShellExecute(0, 'Open', PChar(filename), PChar(Params),
PChar(DefaultDir), ShowCmd);
{$ENDIF}
{$IFDEF MACOS}
_system(PAnsiChar('open ' + AnsiString(filename)));
{$ENDIF}
end;
我通过在制作第一个捆绑包后将另一个签名捆绑包放在第一个捆绑包内的任何位置来完成此操作。我认为您可以通过使用 Delphi 中的部署页面将其他应用程序放入捆绑包中,只需将其他可执行文件(不是捆绑包)放在与 Delphi 放置主应用程序代码相同的位置即可。
从 OSX 10.6.2 开始“open”可以计算参数:
uses
{$IFDEF POSIX}
Posix.Stdlib
{$ENDIF POSIX}
;
Procedure OSXexecute(const program,params:string);
begin
_system(Pansichar('open -a '+AnsiString(program)+' --args '+Ansistring(params)));
end;