I know this is an old question, but I came here looking for an answer, so I'll say what I used. SRVSTART worked great, I created an ini file saying what to start and what directory to start the program in, and then used the SRVSTART exe to create the service. Then used SC to set a description. Then used the Services UI to set the logon ID to use for the service. SRVStart can be setup to watch your program and restart it if it stops running. So far it is working great. Here is a link to the author's page, you can download it. If you get the source code, it is old, written for Visual C++ 6.0. Or you can get the exe and required dlls there.
http://www.rozanski.org.uk/software
Here is my sample INI file (in C:\SpecialService folder for this example)
SpecialService.ini:
[SpecialService]
startup=C:\SpecialService\SpecialProgram.exe
startup_dir=C:\SpecialService
shutdown_method=kill
auto_restart=y
restart_interval=60
Then here is the command to create the service:
srvstart install SpecialService -c C:\SpecialService\SpecialService.ini
Finally here is the command to set the description of the service:
SC description SpecialService "Put your description here in quotes... "