Forse puoi scrivere un ciclo che tenga traccia di se lo script ha avuto successo e continua a provare fino a quando non lo ha (o se è trascorso un certo periodo di tempo). Se in effetti il problema è che gli eventi di sistema non sono completamente avviati, il ciclo potrebbe chiedere gli eventi di sistema se gli eventi del sistema delle applicazioni sono in esecuzione. Ecco una semplice funzione che puoi usare:
on appIsRunning(appName)
tell application "System Events" to (name of processes) contains appName
end appIsRunning
Per essere sicuro che sia stato avviato completamente, potresti implementare il tuo ritardo dopo il ciclo.
Ecco come appare la funzione del ciclo:
on startApp(appName)
set IsRunning to false
set tries to 20
repeat until (IsRunning is true or tries is 0)
set IsRunning to appIsRunning(appName)
set tries to (tries - 1)
delay 0.1
end repeat
end startApp
O forse hai un altro modo per determinare il buon esito dello script ... c'è qualche stato che puoi controllare per determinare il successo? In tal caso, è possibile eseguire il ciclo fino a quando non viene soddisfatta tale condizione anziché all'avvio di Eventi di sistema.
Un'altra cosa è che non so se gli eventi di sistema debbano "registrarsi" con applescript prima che un applescript si spenga affinché funzioni. In tal caso, potresti provare questo: puoi creare uno script di supporto separato che avvii eventi di sistema e poi esegue il tuo script in questo modo:
startApp("System Events")
set myApp to "/Users/whatever/myScriptAsApp.app"
do shell script "open " & quoted form of POSIX path of myApp & " 2>&1 &"
Fammi sapere come va. Spesso ho lo stesso problema con te con un paio di miei script. Non ho ancora provato questo.
Buona fortuna,
Rob