Ho scoperto un altro metodo per riavviare un AppleScript.
Questo metodo non è "migliore" degli altri metodi che sono stati forniti; è semplicemente un altro modo di affrontare le cose. Ecco come puoi riavviare un file .scpt in AppleScript:
if buttonChoice is "Start over" then
run script "/Users/Me/Desktop/My script.scpt"
error number -128 (* user cancelled *)
end if
Oppure, in alternativa:
if buttonChoice is "Start over" then
run script (path to me)
error number -128 (* user cancelled *)
end if
Questo codice crea semplicemente un'altra istanza del file .scpt di AppleScript correntemente in esecuzione e quindi chiude l'istanza corrente.
Ho saputo di run script
da un commento da parte dell'utente Camelot sulla seguente pagina web:
Chiama un altro AppleScript | Comunità Apple
Con la stessa premessa di base, se vuoi riavviare un file .app usando AppleScript, usa questo:
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
Oppure, in alternativa:
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
Il -n
consente di aprire una nuova istanza dell'applicazione, anche se è già in esecuzione un'istanza di questa applicazione. Il -n
è necessario perché, in pratica, l'app AppleScript si chiude tecnicamente dopo che è stata creata la seconda istanza, anche se questo potrebbe non sembrare il caso in base a ciò che si vede sullo schermo.
Quando si dovrebbe utilizzare questo metodo di riavvio?
Questo diventerà un po 'confuso, quindi abbi pazienza con me ...
Ho un file .scpt di AppleScript che viene eseguito automaticamente quando il computer si riattiva dallo stato di stop. (Io uso SleepWatcher per realizzare questo.)
Questo file .scpt chiama una subroutine specifica di un diverso file .scpt; salta l'intero script e esegue solo il codice che si trova in una subroutine specifica. (Per farlo, uso il metodo Descritto qui .)
Questo secondo file .scpt è pieno di pulsanti "Start over" in quasi tutti i dialoghi, utilizzando:
return on run
per ottenere l'effetto di riavvio. (Questo metodo di riavvio è stato fornito in una precedente risposta a questa domanda.)
Ora, il problema è che, mentre il mio primo file .scpt , infatti, riavvia con successo il secondo file .scpt quando return on run
è usato nel secondo file .scpt, una volta che lo script ha completato , una finestra di dialogo contenente il seguente errore viene presentata all'utente:
«script» doesn’t understand the “return”
Per essere onesti, questo errore ha senso; il primo file .scpt non può comprendere appieno il significato di return
, perché non è mai stato realmente in esecuzione l'altro script. Stava solo eseguendo una subroutine dell'altro script.
Questo errore mi ha infastidito. Così, ho fatto ancora un po 'di problemi con il codice e ho imparato a conoscere run script
. Il tipo specifico di scenario che ho appena illustrato è dove il metodo di riavvio run script
brilla veramente.
Il semplice metodo run script
salva il giorno: riavvia il secondo file .scpt e senza dover richiamare il comando return
nel processo. Pertanto, questo metodo è completamente privo di errori, anche quando viene eseguito al di fuori del suo codice più ampio e circostante. Questo è l'unico metodo in questa pagina in grado di farlo, poiché gli altri metodi dipendono da return
.