Está muy bien el código, muy interesante la verdad.
¿Pero la instrucción TerminateProcess no podría susbtituirse (o equivale) simplemente por un Close?
Lo digo porque un Close es más usual que el TerminateProcess, no necesita parámetros, etc.
Yo lo he probado y consigo el mismo efecto.
Código Delphi
[-]
procedure ReiniciarApp;
begin
WinExec(PChar(ParamStr(0)), SW_NORMAL);
Close;
end;
Saludos