Unter Linux haben Programme eine Hierarchie. Wenn dein Programm geschlossen wird oder abstürzt, werden auch davon aufgerufene Programme beendet.
Simple Demonstration:
Es gibt Mittel Programme aus der Hierarchie zu lösen. So z.B. das Programm "nohup"
Ein Beispielcode:
Code: Alles auswählen
programm$="mousepad"
parameter$=~"-c \"nohup "+programm$+~" &>/dev/null &\""
If RunProgram("/bin/sh", parameter$, "")
Debug programm$+" gestartet und unabhängig gemacht"
Debug "Parameter waren : "+Chr(9)+parameter$
Else
Debug programm$+" nicht gefunden/konnte nicht gestartet werden, anderes Programm einsetzen, Pfad prüfen, Rechte prüfen, ..."
EndIf
; Mousepad sollte weiter im Hintergrund laufen
End
Das sollte dann auch in deiner OnError funktionieren, das hab ich auf die Schnelle nicht getestet.
(Hinweis: Es erscheint mir ein schlechter Programmierstil, bei einem Fehler das eigene Programm neuzustarten, von wenigen Ausnahmen wie einem Webserver mal abgesehen. Generell sollte man eher untersuchen was den Fehler verursacht hat und beenden, damit keine Folgefehler entstehen)
Warum nicht einfach
?
Weil nohup sonst eine Datei nohub.out im aktuellen Verzeichnis erzeugt und dort die Programmausgabe hineinschreibt, dass hab ich schnell mit einem Shell redirect behoben. Es mag bessere Programme für die Aufgabe geben, nohup war mir bekannt und ist praktisch immer vorhanden. Wenn du eine bessere Lösung findest, poste sie gerne hier.