Having written many services in C, C++, VB, and C#, here's my opinion (for what it's worth) of the various approaches:
C: Lean, mean, and hard to write
C++: Same, only even harder to write
VB (ntsvc.ocx): Works, although the OCX is unsupported by Microsoft, and will crash VB if you try to debug the service startup routines.
VB (Desaware): Works well. But expensive.
C#: Way cool. Doesn't run as fast as the others mentioned (the penalty of managed code), but easy to write, easy to support. Same would apply to VB7.
If I were writing new code, I would go with the .NET family to write services simply because they're supported, they work, and you can debug them.
Chip H.