Odkryłem inną metodę ponownego uruchomienia AppleScript.
Ta metoda nie jest „lepsza” niż inne dostarczone metody; to tylko kolejny sposób zbliżania się do rzeczy. Oto jak możesz ponownie uruchomić plik .scpt w AppleScript:
if buttonChoice is "Start over" then
run script "/Users/Me/Desktop/My script.scpt"
error number -128 (* user cancelled *)
end if
Lub alternatywnie:
if buttonChoice is "Start over" then
run script (path to me)
error number -128 (* user cancelled *)
end if
Ten kod po prostu tworzy inną instancję aktualnie uruchomionego pliku AppleScript .scpt, a następnie zamyka bieżącą instancję.
nauczyłem się o run script
z komentarza użytkownika Camelot na następującej stronie internetowej:
Zadzwoń do kolejnego Jabłka | Społeczności Apple
Z tą samą podstawową przesłanką, jeśli chcesz ponownie uruchomić plik .app za pomocą AppleScript, użyj tego:
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
Lub alternatywnie:
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
The -n
umożliwia otwarcie nowej instancji aplikacji, nawet jeśli instancja tej aplikacji jest już uruchomiona. The -n
jest konieczne, ponieważ praktycznie rzecz biorąc, aplikacja AppleScript jest technicznie zamknięta po utworzeniu drugiej instancji, chociaż może się tak nie wydawać na podstawie tego, co widzi się na ekranie.
Kiedy należy użyć tej metody ponownego uruchomienia?
To będzie trochę mylące, więc miejcie ze mną ...
Mam plik AppleScript .scpt, który uruchamia się automatycznie, gdy komputer budzi się ze snu. (Używam SleepWatcher do osiągnięcia tego.)
Ten plik .scpt wywołuje określony podprogram innego pliku .scpt; pomija cały skrypt i uruchamia tylko kod znaleziony w jednym, określonym podprogramie. (Aby to osiągnąć, używam metody opisany tutaj .)
Ten drugi plik .scpt jest bogaty w przyciski „Rozpocznij od” w prawie każdym oknie, wykorzystując:
return on run
aby osiągnąć efekt ponownego uruchomienia. (Ta metoda ponownego uruchomienia została podana w poprzedniej odpowiedzi na to pytanie).
Problem polega na tym, że mój pierwszy plik .scpt w rzeczywistości pomyślnie się restartuje drugi plik .scpt, gdy return on run
jest używany w drugim pliku .scpt, gdy skrypt zostanie zakończony, użytkownikowi zostanie wyświetlone okno dialogowe zawierające następujący błąd:
«Skrypt» nie rozumie „powrotu”
Aby być uczciwym, ten błąd ma sens; pierwszy plik .scpt nie może w pełni zrozumieć znaczenia return
, ponieważ nigdy tak naprawdę nie uruchamiał drugiego skryptu. Działa tylko jeden podprogram innego skryptu.
Ten błąd mnie podsłuchał. Więc trochę więcej pomieszałem z kodem i dowiedziałem się o nim run script
. Konkretny typ scenariusza, który właśnie wyjaśniłem, to gdzie run script
metoda restartu naprawdę świeci.
Prosty run script
metoda zapisuje dzień: ponownie uruchamia drugi plik .scpt i bez konieczności wywoływania return
polecenie w procesie. Zatem ta metoda jest całkowicie wolna od błędów, nawet gdy jest uruchamiana poza swoim większym, otaczającym kodem. Jest to jedyna metoda na tej stronie, która może to zrobić, ponieważ inne metody są od niej zależne return
.