2009-07-26 19 views
2

Ich frage mich, wie Launchd zum Neustart meiner App festgelegt werden, wenn der Benutzer nicht gewählt hat, wählen Sie "Beenden" aus der oberen Leiste. Es gibt Fälle, in denen der App etwas passieren kann, und es kann den Abbruch erzwingen. Wenn eine Einstellung ausgewählt ist, möchte ich, dass sie automatisch neu gestartet wird. Ich habe mir das hier angesehen, bevor ich hier gepostet habe, und ich habe gehört, dass Launchd ziemlich gut darin wäre. Hat jemand einen Ratschlag, wie man es erreicht?Launched Relaunch App beim Beenden

Danke für jede Hilfe.

Antwort

2

Lassen Sie Ihr Programm eine leere .something-Datei in den Benutzerordner des Benutzers schreiben, wenn die App ausgeführt wird. Entfernen Sie die .something Datei, wenn die Anwendung normal beendet wird. Jetzt könnten Sie ein kleines Skript (AppleScript oder Shell-Skript) schreiben, das überprüft, ob Ihre App läuft und falls nicht, ob es funktionieren sollte (indem Sie die .something Datei überprüfen). Das Skript kann dann, falls erforderlich, die App neu starten. Sie können festlegen, dass das Skript beim Start mithilfe von launchd automatisch ausgeführt wird.

+0

Hallo Diederik: Gute Idee, aber ich habe eine Frage dazu. Diese Frage ist: Wann sollte ich das Skript ausführen? Kann ich es so einstellen, dass es überwacht, ob die App sich irgendwie schließt oder so? – PF1

+0

Das Skript sollte die ganze Zeit laufen. Innerhalb des Skripts sollten Sie eine Ruhezeit (wie ein Unix-Schlaf (10)) verwenden, damit das Skript nicht zu viel CPU verbraucht. Anstelle von Launchd können Sie das Skript auch in den Login-Elementen des Benutzers hinzufügen. Auf diese Weise hat die Voreinstellung nur eine Auswirkung auf den aktuellen Benutzer (was der bevorzugte Weg sein sollte). – diederikh

+0

Danke für diesen Rat Diederik. Also, sagst du, dass das Skript alle 10 Sekunden nach dieser Datei suchen soll? Und wenn es dort wäre, würde es versuchen, die App zu öffnen (und wenn die App geöffnet war, dann würde es nicht so aussehen, als wäre irgendetwas passiert). Aber, und ich gehe davon aus, dass es keine gibt, gibt es eine Möglichkeit, Benachrichtigungen zu erhalten, wenn die App beendet wird? Es scheint, als wäre das einfacher. – PF1

2

Sie können die Einstellung SuccessfulExit von KeepAlive verwenden, um die App nur neu zu starten, wenn sie nicht normal beendet wurde. Weitere Informationen finden Sie unter this Mac OS X Hints entry und/oder auf der Manualseite launchd.plist.

+0

Hallo smorgan: Danke für den Link. Es sieht wirklich gut aus! – PF1