2009-08-06 14 views
2

Ich versuche, ein Applescript in einem Launchd Plist auszuführen, aber aus irgendeinem Grund funktioniert es einfach nicht. Es könnte sein, dass es mein Computer ist, aber ich denke, dass da etwas anderes nicht stimmt. Wenn jemand diesen Beitrag sehen und kommentieren könnte, würde ich es sehr schätzen!Launched PLIST läuft nicht

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>Label</key> 
<string>com.pf.Testing</string> 
<key>ProgramArguments</key> 
<array> 
<string>/usr/bin/osascript</string> 
<string>-e</string> 
<string>'tell application "Finder"' -e 'set didQuit to (path to home folder as string) &amp; ".myApp"' -e 'if (exists file didQuit) then' -e 'tell application "TestApp"' -e 'activate' -e 'end tell' -e 'end if' -e 'end tell'</string> 
</array> 
<key>StartInterval</key> 
<integer>20</integer> 
<key>RunAtLoad</key> 
<true/> 
</dict> 
</plist> 

Danke für jede Hilfe!

AKTUELLE PLIST:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>Label</key> 
<string>com.pf.Testing</string> 
<key>ProgramArguments</key> 
<array> 
<string>/usr/bin/osascript</string> 
<string>-e</string> 
<string>'tell application "Finder"'</string> 
<string>-e</string> 
<string>'set didQuit to (path to home folder as string) &amp; ".myApp"'</string> 
<string>-e</string> 
<string>'if (exists file didQuit) then'</string> 
<string>-e</string> 
<string>'tell application "TestApp"'</string> 
<string>-e</string> 
<string>'activate'</string> 
<string>-e</string> 
<string>'end tell'</string> 
<string>-e</string> 
<string>'end if'</string> 
<string>-e</string> 
<string>'end tell'</string> 
</array> 
<key>StandardErrorPath</key> 
<string>/Users/pf/Desktop/Problem.log</string> 
<key>StartInterval</key> 
<integer>20</integer> 
<key>RunAtLoad</key> 
<true/> 
</dict> 
</plist> 

Antwort

1

Ein wahrscheinliches Problem ist, dass launchd nicht Apple ausgeführt wird in dem angemeldeten in GUI Kontext des Benutzers und damit Apple kann nicht an den Finder sprechen.

Stellen Sie sicher, dass der Plist als LaunchAgent und nicht als LaunchDaemon installiert ist (der Plist sollte sich in/Library/LauchAgents oder ~/Library/LaunchAgents befinden).

Versuchen Sie Folgendes in die plist hinzufügen, um das Skript zu machen in der GUI-Kontext auszuführen:

<key>LimitLoadToSessionType</key> 
<string>Aqua</string> 

Beachten Sie, dass dies nur dann zuverlässig auf 10.5 arbeiten und darüber; Ich war nicht in der Lage, Benutzer-LaunchAgents auf 10.4 korrekt zu funktionieren.

+0

Hallo Nick: Vielen Dank für Ihre Antwort. Leider wird auch nach dem Verwenden des LimitLoadToSessionType-Codes und der doppelten Überprüfung, dass sich im Pfad eine Datei befand, die Datei immer noch nicht ausgeführt. Es ist wirklich seltsam, vor allem, weil wenn ich den gleichen Code in Terminal ausführen, es funktioniert gut ... Irgendwelche Ideen? – PF1

+1

Eine andere Idee: Statt die AppleScript-Befehle als Argumente zu übergeben, versuchen Sie, sie in eine separate Skriptdatei zu schreiben und ihren Pfad an osascript zu übergeben. –

1

Ich denke, Sie müssen Ihre letzte Argument in separate Argumente zu brechen - jedes Argument (die -e und die einzelnen Zeilen von AppleScript) sollte in einem separaten <string /> Element sein. Entweder das, oder wie Nick sagt nur in einer .applescript Datei mit der ganzen Skript übergibt in

Das Problem ist, dass Ihr Befehl wie interpretiert wird.

/usr/bin/osascript -e '\'tell application "Finder"\' -e \'set didQuit to (path to home folder as string) & ".myApp"\' -e \'if (exists file didQuit) then\' -e \'tell application "TestApp"\' -e \'activate\' -e \'end tell\' -e \'end if\' -e \'end tell\'' 

das ist nicht das, was Sie gemeint.

+0

Hallo Graham: Ich habe getan, was Sie vorgeschlagen, aber jetzt bekomme ich den folgenden Fehler, wenn ich StandardErrorPath verwenden, um das Problem zu protokollieren: 0: 1: Syntaxfehler: Ein unbekanntes Token kann hier nicht gehen. (-2740) – PF1

+0

Wenn Sie genau dasselbe Skript im Skript-Editor ausführen, sagt Ihnen das, wo sich Ihr Fehler befindet? –

+0

Nein, der einzige Unterschied im Skripteditor besteht darin, dass ich es als Applescript-Dokument formatierte. Das funktioniert gut. Und derselbe Code läuft im Terminal gut und erzeugt keinen Fehler. Funktioniert dieser Code für Sie? – PF1