servicios - Crear un servicio de Windows sin Visual Studio
servicio de windows visual studio 2017 (4)
Entonces, crear un servicio de Windows usando Visual Studio es bastante trivial. Mi pregunta profundiza sobre qué hace que un ejecutable se pueda instalar como un servicio y cómo escribir un servicio como una aplicación C directa. No pude encontrar muchas referencias sobre esto, pero supongo que tiene que haber alguna interfaz que pueda implementar para que mi .exe se pueda instalar como un servicio.
Básicamente, hay algunas configuraciones de registro que debe establecer, así como algunas interfaces para implementar.
Mira esto: http://msdn.microsoft.com/en-us/library/ms685141.aspx
Está interesado en SCM (Service Control Manager).
Espero que esto ayude:
http://support.microsoft.com/kb/251192
Parece que necesita ejecutar este exe contra un ejecutable binario para registrarlo como un servicio.
Configurar su ejecutable como un servicio es parte de esto, pero de manera realista generalmente lo maneja cualquier software de instalación que esté usando. Puede usar la herramienta de línea de comando SC durante la prueba (o si no necesita un instalador).
Lo importante es que su programa debe llamar a StartServiceCtrlDispatcher () al inicio. Esto conecta su servicio con el administrador de control de servicio y configura una rutina ServiceMain que es el punto de entrada principal de su servicio.
ServiceMain (puede llamarlo como quiera realmente, pero siempre parece ser ServiceMain) debe llamar a RegisterServiceCtrlHandlerEx () para definir una rutina de devolución de llamada para que el sistema operativo pueda notificar a su servicio cuando ocurran ciertos eventos.
Aquí hay algunos fragmentos de un servicio que escribí hace unos años:
configurar como servicio:
SERVICE_TABLE_ENTRY ServiceStartTable[] =
{
{ "ServiceName", ServiceMain },
{ 0, 0 }
};
if (!StartServiceCtrlDispatcher(ServiceStartTable))
{
DWORD err = GetLastError();
if (err == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
return false;
}
ServiceMain:
void WINAPI ServiceMain(DWORD, LPTSTR*)
{
hServiceStatus = RegisterServiceCtrlHandlerEx("ServiceName", ServiceHandlerProc, 0);
manejador de servicio:
DWORD WINAPI ServiceHandlerProc(DWORD ControlCode, DWORD, void*, void*)
{
switch (ControlCode)
{
case SERVICE_CONTROL_INTERROGATE :
// update OS about our status
case SERVICE_CONTROL_STOP :
// shut down service
}
return 0;
}
Sé que llegué un poco tarde a la fiesta, pero recientemente tuve la misma pregunta y tuve que luchar entre las redes buscando respuestas.
Logré encontrar este artículo en MSDN que de hecho sienta las bases. Terminé combinando muchos de los archivos aquí en un solo exe que contiene todos los comandos que necesito, y agregué mi propio método "void run ()" que gira por la vida entera del servicio para mis propias necesidades.
Este sería un gran comienzo para otra persona con exactamente esta pregunta, por lo que para los buscadores futuros que están por ahí, compruébalo:
El ejemplo de servicio completo http://msdn.microsoft.com/en-us/library/bb540476(VS.85).aspx