Well, long story short - you shouldn't. i don't say "can't" but you really shouldn't.
starting from Windows Vista, there is a better separation between the sessions and the desktops and there are good reasons for that separation.
First of all - the basics: in windows you can have multiple sessions. in each session you can have multiple Windows Stations. in each Windows Station you can have multiple desktops (and the user's desktop usually named "Default).
By default, services uses not-interactive windows station. if you make your service interactive it means your service will run in Winsta0 (the interactive window station) at session 0 - so you can do some interaction with the desktop (in windows xp - if ignoring fast user switching).
But - starting from Windows Vista (and even before with Terminal Services scenarios) the active user is no longer running in session 0. so you does open internet explorer... but in the wrong session.
What you can do? there are some workarounds. you can try to identify the session you're interested in (where the current loggen on user is, maybe by finding session with explorer.exe process running), then re-use the process token (using OpenProcessToken) and duplicates it (using DuplicateTokenEx) and then created new process with that token (using CreateProcessAsUser) and launch the new process in Winsta0\Default (it'll be launched in the token's session, which hopefully be the user session - so the user will be able to see it).
Hope that helps.