Buscate la funcion RunAndWait32 que anda por el foro.
El lanzador abre el programa de Bases de datos y se queda esperando con esa función hasta que termine el programa de BBDD.
El programa de bases de datos pone el Timer en marcha y cuando el tiempo expire, informa al usuario y se cierra el programa.
Ahora que se ha cerrado, el lanzador continua su ejecución y cierra el sistema con el Logoff.
Como el programa lanzador se está ejecutando en el contexto de los demás procesos, si cerrará el sistema bien.
EDITO:
Código Delphi
[-]
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar (StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
Win32Check( CreateProcessWithLogonW( StringToOleStr('UsuarioConPermisos'),StringToOleStr ('Dominio'),
StringToOleStr('Password'),0, StringToOleStr('Exe'), nil, 0, nil, StringToOleStr('DirectorioTrabajo'),
StartupInfo, ProcessInfo ) );
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
ShutDownwindows(logoff+ewx_force);
end;
Saludos