Я відкрив ще один метод перезапуску AppleScript.
Цей метод не «кращий», ніж інші методи, які були надані; це просто ще один спосіб наближення речей. Ось як можна перезапустити .scpt файл у AppleScript:
if buttonChoice is "Start over" then
run script "/Users/Me/Desktop/My script.scpt"
error number -128 (* user cancelled *)
end if
Або, як варіант:
if buttonChoice is "Start over" then
run script (path to me)
error number -128 (* user cancelled *)
end if
Цей код просто створює інший екземпляр поточного запущеного файлу AppleScript .scpt, а потім закриває поточний екземпляр.
Я дізнався про run script
коментар користувача Camelot на наступній веб-сторінці:
Зателефонуйте до іншого яблучного | Apple Communities
З тією ж базовою умовою, якщо ви хочете перезапустити .app-файл за допомогою AppleScript, використовуйте це:
if buttonChoice is "Start over" then
do shell script "open -n " & quoted form of "/Users/Me/Desktop/My app.app"
error number -128 (* user cancelled *)
end if
Або, як варіант:
if buttonChoice is "Start over" then
do shell script "open -n " & (quoted form of (POSIX path of (path to me)))
error number -128 (* user cancelled *)
end if
-n
Дозволяє новий екземпляр додатку , щоб відкрити, навіть якщо екземпляр цього додатка вже запущений. Це -n
необхідно, тому що, практично кажучи, додаток AppleScript технічно закривається після створення другої інстанції, навіть якщо це може виявитися не на основі того, що ви бачите на своєму екрані.
Коли слід використовувати цей метод перезавантаження?
Це стане трохи заплутаним, тож потерпіть зі мною ...
У мене є файл AppleScript .scpt, який автоматично запускається, коли мій комп'ютер прокидається зі сну. (Для цього я використовую SleepWatcher .)
Цей файл .scpt викликає конкретну підпрограму іншого файлу .scpt; він пропускає весь сценарій і виконує лише той код, який знаходиться в одній конкретній підпрограмі. (Для цього я використовую описаний тут метод .)
У цьому другому .scpt-файлі майже в кожному діалоговому вікні є кнопки "Почати спочатку", використовуючи:
return on run
для досягнення ефекту перезавантаження. (Цей метод перезапуску був наданий у попередній відповіді на це питання.)
Тепер проблема полягає в тому, що мій перший .scpt файл насправді успішно перезапускає другий .scpt-файл, коли return on run
він використовується у другому .scpt-файлі, після завершення сценарію користувачеві відкривається діалогове вікно, що містить наступну помилку. :
«Сценарій» не розуміє «повернення»
Якщо чесно, ця помилка має сенс; перший .scpt файл не може повністю зрозуміти значущість return
, оскільки він ніколи по-справжньому не запускав інший сценарій. Він виконував лише одну підпрограму іншого сценарію.
Ця помилка помилила мене. Отже, я ще більше розібрався з кодом і дізнався про це run script
. Конкретний тип сценарію, який я щойно пояснив, полягає в тому, де run script
справді світить метод перезапуску.
Простий run script
метод економить день: він перезавантажує другий .scpt файл і без необхідності викликати return
команду в процесі. Таким чином, цей метод є абсолютно безпомилковим, навіть коли він використовується поза його більшим, оточуючим кодом. Це єдиний метод на цій сторінці, який може це зробити, оскільки інші методи покладаються на return
.