Einzelnen Beitrag anzeigen

GoTo0815

Registriert seit: 18. Mai 2004
148 Beiträge
 
Delphi XE2 Professional
 
#1

Firemonkey (RAD Studio XE2) Start einer zweiten Anwendung unter MacOS

  Alt 6. Nov 2018, 10:46
Guten Tag,

um externe Dateien (beispielsweise ein PDF) über meine "main.app" auszuführen benutze unten stehenden Code.
Die beispielsweise PDF Datei liegt dabei im Unterverzeichnis "PDF" in der main.app selbst.
Der Aufruf für die MacOS Datei die ich ausführen möchte lautet wie unten aufgeführt. Das Ganze funktioniert soweit zuverlässig.
Nun möchte ich aber eine weitere Anwendung "second.app" anstatt einer PDF starten.

Hier nun meine Fragen:
1. Darf die zweite Anwendung als Unterverzeichnis der ersten Anwendung "main.app" existieren, oder muss die in einem Verzeichnis außerhalb der main.app liegen?
2. Die Anwendung liegt auf einem USB-Stick und wird von dort gestartet. Wie ermittle ich das Laufwerk, auf dem die main.app läuft? Unter WINDOWS wäre das ja beispielsweise ExtractFileDrive, aber das liefert bei MacOS einen String der Länge Null.
3. Kann der Code unten überhaupt für das Ausführen einer Anwendung "second.app" verwendet werden (unabhängig in welchen Verzeichnis die Datei liegt) ? Ich habe mittlerweile recht viele Variationen ausprobiert, aber leider bisher ohne Erfolg.

Ich wäre sehr dankbar, wenn eine Antwort mit Codebeispiel auch für den Aufruf der Funktion/Prozedur käme. Ggf. liegt ja das Problem nicht in der Prozedur, sondern in der falschen Pfadübergabe.

Vielen Dank im Voraus! Beste Grüße Hendrik

*** Aufruf für MacOS***
Code:
  {$IFDEF POSIX}
    fDir := '"' + IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
    TMisc.Open(fDir+'PDF/demo.pdf"');
  {$ENDIF POSIX}

*** Unit für die Prozedur
Code:
unit U_fOpen;

interface

uses
{$IFDEF MSWINDOWS}
  Winapi.ShellAPI, Winapi.Windows;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
  Posix.Stdlib;
{$ENDIF POSIX}

type
  TMisc = class
    class procedure Open(sCommand: string);
  end;

implementation

class procedure TMisc.Open(sCommand: string);
begin

  {$IFDEF MSWINDOWS}
    ShellExecute(0, 'OPEN', PChar(sCommand), '', '', SW_SHOWNORMAL);
  {$ENDIF MSWINDOWS}

  {$IFDEF POSIX}
    _system(PAnsiChar('open ' + AnsiString(sCommand)));
  {$ENDIF POSIX}

end;
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat