On vista you could use a service in Automatic (Delayed) mode, this would start before log on if no one logged on fast enough though but if you wished to avoid running until much of the system had become ready this would work. If you are heavily user centric in your desire to wait till they are ready then you will likely have to use user centric triggers.
Several metrics exist which would give you a good idea of whether the user considered the session ready for use:
- CPU load of processes associated with the System account were no longer taking a significant proportion of the CPU time.
- The user has begun interacting with the UI (so significant mouse movement or keyboard activity)
- network connectivity is established
Since these are heuristics you should have some time based constraints for the minimum and maximum possible wait in case they misfire.