A service is *most of the time* a console application. But not mandatory. This does not mean necessary that the service displays an user interface, but if the project was compiled with /subsystem:console or /subsystem:windows. Other than this, a service application is registered in system as such, accepts certain control codes, and is managed by SCM (Service Control Manager). One can write a service that can interact with the desktop and even display an user interface (although not recommended, sure), not only because a service *must* be a console application, but because this kind of application is intended to be not interactive, system managed, and perform a continuous "service" - hence the name - without user interface. However, a service can create hidden windows for special purpose messages, or use functions that require a message loop. Even COM uses special purpose windows from what I know, so indirectly creating, say, CoCreateInstance, in a service does not makes a service "window free". A console application is what its name says, just an application compiled for and executed in a console window. Nothing more.
Nuclear launch detected