Запущенный PLIST не работает

Я пытаюсь запустить Applescript внутри списка запуска, но по какой-то причине он просто не работает. Возможно, это мой компьютер, но я думаю, что с ним может быть что-то еще. Если бы кто-то мог посмотреть и прокомментировать этот пост, я был бы очень признателен!

<?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>

Спасибо за любую помощь!

ПОСЛЕДНИЙ СПИСОК:

<?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>

person PF1    schedule 06.08.2009    source источник


Ответы (2)


Вероятная проблема заключается в том, что launchd не выполняет ваш AppleScript в контексте GUI вошедшего в систему пользователя, и поэтому AppleScript не может общаться с Finder.

Убедитесь, что plist установлен как LaunchAgent, а не как LaunchDaemon (plist должен находиться в /Library/LauchAgents или ~/Library/LaunchAgents).

Попробуйте добавить в plist следующее, чтобы скрипт запускался в контексте GUI:

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

Обратите внимание, что это будет надежно работать только на 10.5 и выше; Мне не удалось заставить корректно работать LaunchAgents для каждого пользователя на 10.4.

person Nick Dowell    schedule 12.08.2009
comment
Привет Ник: Спасибо за ваш ответ. К сожалению, даже после использования кода LimitLoadToSessionType и двойной проверки наличия файла в пути он все равно не запускается. Это действительно странно, особенно потому, что когда я запускаю тот же код в Терминале, он работает просто отлично... Есть идеи? - person PF1; 12.08.2009
comment
Еще одна идея: вместо того, чтобы передавать команды applescript в качестве аргументов, попробуйте поместить их в отдельный файл сценария и передать его путь в osascript. - person Nick Dowell; 13.08.2009

Я думаю, вам нужно разбить ваш последний аргумент на отдельные аргументы - каждый аргумент (-e и отдельные строки AppleScript) должен быть в отдельном элементе <string />. Либо так, либо, как говорит Ник, просто передайте файл .applescript со всем скриптом.

Проблема в том, что ваша команда интерпретируется как:

/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\''

это не то, что вы имели в виду.

person Community    schedule 14.08.2009
comment
Привет, Грэм. Я сделал то, что вы предложили, но теперь я получаю следующую ошибку, когда использую StandardErrorPath для регистрации проблемы: 0:1: синтаксическая ошибка: неизвестный токен не может быть здесь. (-2740) - person PF1; 15.08.2009
comment
если вы запустите точно такой же сценарий в редакторе сценариев, скажет ли это вам, где ваша ошибка? - person ; 15.08.2009
comment
Нет, единственная разница в редакторе сценариев заключается в том, что я отформатировал его как документ Applescript. Это прекрасно работает. И этот же код отлично работает в Терминале и не выдает ошибки. Этот код работает для вас? - person PF1; 15.08.2009
comment
Это говорит о том, что нам нужно увидеть только что отредактированный файл plist, так как проблема все еще должна быть там. - person ; 15.08.2009
comment
Просто предположение, но может ли проблема заключаться в том, что я включаю /usr/bin/osascript в раздел ProgramArguments, а не в раздел Program? - person PF1; 19.08.2009
comment
@PF1: это не должно иметь значения, справочная страница документирует, что любой из них приемлем. Должен признаться, что сейчас я в тупике... - person ; 19.08.2009
comment
@Graham Lee: Работает ли тот же код для вас, если у вас есть файл .whatever в вашем домашнем каталоге? Может быть, это мой компьютер... - person PF1; 19.08.2009