Yep, I've used ntsvc.ocx - and finding all of it (samples, docs) and getting it to work are a pain, but it CAN be done.
It is a long topic to try and cover here though, and as I recall even though MS provided the OCX, this approach is still not recommended by them. They just don't want people making NT services in VB because there is a lot of bad VB code out there.
They seemed worried about uncontrolled memory leaks and similar "crud build-up" due to poor programming practices. The problem is an NT service may run, and run, and run... much longer and through more internal cycles than a typical simple desktop or client program. The funny part about this argument is that I'd have to say I've seen perhaps more cruddy C code out there than can otherwise be believed. And C encourages some very NASTY kinds of dangerously bad programming.
So... you can do it, I have done it, it isn't THAT hard but it is far from trivial even using ntsvc.ocx, and MS advises against it. I'd start with some searches on "ntsvc.ocx" though to find samples and tutorials on the web. I'd offer you mine as a sample, but I'm constrained by work-rules.
Your best bet is to use Delphi, modern versions of which can make NT services very easily. Problem is: Delphi is not cheap, and you can't get by with the low-end editions. It also means learning a new language, a new IDE, and a new component model.
If your VB program is very well-behaved, and quite simple... you might also get by with a sort of "wrapper" called srvany.exe that was part of the old NT 4 Resource Kit (I think). I had trouble locating srvany.exe myself, and it also had a number of dire warnings attached.
srvany.exe itself was the service you installed, with a control file of some sort that told a given installed instance of it to fire off your VB EXE when it started up.