Mam program który restartuje się co noc o określonej porze. Program ma też zabezpieczenie przed uruchomieniem więcej niż jednej instancji.
Zabezpieczenie realizuje poprzez wykorzystanie mutex-a, prosta sprawa.
Restart znowu realizuję poprzez WinAPI:
Application.Terminate;
ShellExecute(Handle, 'Open', PChar(Application.ExeName), nil, nil, SW_NORMAL);
czyli jeszcze prościej niż poprzednia właściwość.
Wszystko działało dłużej niż rok bez żadnych problemów. Niestety, serwer na którym jest program uruchomiony jest dość niemrawy (delikatnie mówiąc) a system dyskowy to katastrofa. Aktualizacje jeszcze go przymuliły. Są na szczęście rozmowy o upgrade dysków i zapewne moje problemy się zakończą. Co jednak nie oznacza że powinienem przejść do porządku dziennego nad problemem jaki wystąpił.
Dokładnie to wygląda tak:
- program się zamyka,
- program jest ponownie uruchamiany,
- sprawdzany jest warunek czy przypadkiem nie ma już uruchomionego takiego programu.
No i ze względu na powolność systemu dyskowego, system operacyjny w momencie startu aplikacji nadal uważa że poprzednia instancja nadal jest uruchomiona i to wszystko.
Pytanie, jak wprowadzić zwłokę po Application.Terminate a przed funkcją winapi?
Czy wystarczy jakiś timer, lub cokolwiek do obliczania czasu? Czy to jeszcze będzie działało po Application.Terminate?