Applescript - problem med omstartscript

Tråden skapades och har fått 15 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Linköping
  • 2012-02-18 12:26

Då jag gillar att spela emallanåt och vill köra Windows har jag skapat ett enkelt script som jag startar via QuickSilver:

do shell script "bless -mount /Volumes/'WINDOWS HD'/ -legacy -setBoot -nextonly" password "XXXXXX" with administrator privileges
tell application "GimmeSomeTune" to quit
tell application "Finder" to restart 

(gimmesomtune avslutas i scriptet då det ibland hindrar en omstart)

Scriptet funkar jättebra, dock händer det ibland (till synes helt slumpmässigt) att scriptet fortsätter att köras direkt när jag loggat in - och datorn startas om på nytt.

Så som jag förstår det så ligger problemet i att Lion återställer den aktiva sessionen när man loggar in. O ja, jag kan ju alltid stänga av den funktionen "Reopen windows when logging back in" men jag tycker det är en smidig funktion så helst vill jag undvika det.
Det går även att hålla ner Ctrl-knappen vid inlogg så får jag frågan om jag vill köra scriptet eller stänga ner det.

Så, har någon ett tips på hur jag kan göra för att säkertställa att scriptet inte kommer att "sparas" vid omstart och sedan köras vid inlogg?

-cosmo

Intressant, hade jag ingen aning om, men ett tips vore möjligtvis att göra filen skrivskyddad. AppleScript kan nämligen spara t.ex. variabelvärden i själva filen, men om den är skrivskyddad så görs inte det.

Jag är inte säker på att det funkar, men det låter rimligt.

  • Medlem
  • Linköping
  • 2012-02-20 20:44

Testade att lägga till

tell me to quit

som sista rad i scriptet så får vi se om det funkar bättre. Återkommer med resultat...

  • Medlem
  • 2012-02-20 22:57

Du kan sätta klockslag i en variabel och inte "släppa fram" koden om för lite tid har förflutit sedan det kördes senast.

  • Medlem
  • Linköping
  • 2012-02-21 18:40

Funkade inte med min lösning heller :/ Verkar som att så fort Finder får "restart" kommando sparas hela sessionen och startar om. O i de läget är scriptet igång. Så den biten kommer jag nog inte runt.

Ursprungligen av Baron:

Du kan sätta klockslag i en variabel och inte "släppa fram" koden om för lite tid har förflutit sedan det kördes senast.

Hmm, det kan funka. Ska googla lite för jag har ingen aning man skriver sånt i AppleScript.

Ursprungligen av wlao:

Eller göra en "do shell script 'uptime'" och kolla om datorn varit igång i åtminstone ett par minuter.

Det kan funka, men vad händer om jag dröjer med att logga in efter om start? Så där faller nog den lösningen...

  • Medlem
  • 2012-02-20 23:45

Eller göra en "do shell script 'uptime'" och kolla om datorn varit igång i åtminstone ett par minuter.

  • Medlem
  • 2012-02-21 19:02

Jag hjälper dig senare ikväll om ingen annan hinner före.

Och du har förstås provat det jag sa?

  • Medlem
  • Linköping
  • 2012-02-21 21:23
Ursprungligen av Richard Rönnbäck:

Och du har förstås provat det jag sa?

Ja, det har jag och tyvärr så hjälpte det inte

  • Medlem
  • 2012-02-21 23:15

Nu är jag lite trött och tänker kanske fel, men borde inte detta fungera:

property T : 0
set myDelay to 60 -- sekunder innan det ska startas om
set T2 to time of (current date)
if (T2 - myDelay) > T then
    set T to T2
    -- gör något, starta om
else
    -- gör något annat
end if
  • Medlem
  • Linköping
  • 2012-02-22 10:22
Ursprungligen av Baron:

Nu är jag lite trött och tänker kanske fel, men borde inte detta fungera:

property T : 0
set myDelay to 60 -- sekunder innan det ska startas om
set T2 to time of (current date)
if (T2 - myDelay) > T then
    set T to T2
    -- gör något, starta om
else
    -- gör något annat
end if

Tack, ska prova så får vi se.

Hur har du sparat ditt script, som .scpt eller som .app (dvs som application bundle) ?

  • Medlem
  • Linköping
  • 2012-02-22 10:19
Ursprungligen av Richard Rönnbäck:

Hur har du sparat ditt script, som .scpt eller som .app (dvs som application bundle) ?

Sparat som .app

Ursprungligen av -cosmo-:

Sparat som .app

I så fall kan det hända att du måste visa paketinnehåll och skrivskydda själva scriptfilen, som ligger i paketet, inte bundle-mappen.

  • Medlem
  • 2012-02-22 21:19

Kanske RestoreMeNot kan vara till hjälp?

  • Medlem
  • Linköping
  • 2012-02-23 20:00

Efter några omstarter verkar det som att Barons lösning funkade - återkommer ifall det börjar strula igen.

Här är hela scriptet för den som är intresserad:

property T : 0
set myDelay to 60 -- sekunder innan det ska startas om
set T2 to time of (current date)
if (T2 - myDelay) > T then
	set T to T2
	do shell script "bless -mount /Volumes/'WINDOWS HD'/ -legacy -setBoot -nextonly" password "XXXXXX" with administrator privileges
	tell application "GimmeSomeTune" to quit
	tell application "Finder" to restart
else
	return
end if

1
Bevaka tråden