es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Portar un demonio de UNIX a un servicio de Windows.

Escribí un demonio UNIX, en C, que quiero portar a Windows.
Mi objetivo es Windows 10.

Cuando busco cómo crear un servicio de Windows, me encuentro con un enfoque que utiliza .NET y C# que quiero evitar a toda costa.

¿Cómo puedo hacer un servicio simple y directo en C, sin todas las cosas innecesarias que Microsoft intenta cargar en mí? Si realmente tengo que hacerlo, consideraría C++, pero C# y .Net simplemente van demasiado lejos.

También estoy dispuesto a cambiar a un compilador diferente si esto es más fácil fuera de VisualStudio. (Actualmente estoy usando Visual Studio 2019, la última actualización).

NOTA: Mi demonio de Linux solo tiene una dependencia: libhidapi, que está disponible para Windows.

ACTUALIZACIÓN

No hay plantillas de C++ disponibles.

Imagen

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en C, Visual Studio y servicios de Windows, puedes crear fácilmente un servicio de Windows en C sin usar .NET y C#. Puedes lograr esto utilizando la API de Windows directamente desde C y compilándola con un compilador de C como GCC.

    Para crear un servicio de Windows, debes seguir estos pasos básicos:

    1. Define la función de punto de entrada de tu servicio. Esta función debe tener la siguiente firma:
      VOID WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
      

      Esta función es responsable de iniciar y detener tu servicio. Puedes definir cualquier otra función adicional que tu servicio pueda necesitar.

    2. Define la función de controlador de servicio. Esta función debe tener la siguiente firma:

      DWORD WINAPI ServiceCtrlHandler(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
      

      Esta función es responsable de manejar diversas solicitudes de control que tu servicio puede recibir, como inicio, detención, pausa, reanudación, etc.

    3. Registra tu servicio en el Administrador de control de servicios (SCM) llamando a la siguiente función:

      BOOL WINAPI StartServiceCtrlDispatcher(const SERVICE_TABLE_ENTRY *lpServiceTable);
      

      Esta función registra tu servicio en el SCM e inicia el hilo del despachador de control de servicios. Necesitas pasar una matriz de structs SERVICE_TABLE_ENTRY que definan el nombre de tu servicio y la función de punto de entrada.

    4. Implementa la funcionalidad de tu servicio dentro de la función ServiceMain. Puedes utilizar cualquier biblioteca que tu servicio pueda necesitar, siempre y cuando estén disponibles en Windows.

    5. Crea un ejecutable de servicio que se pueda instalar e iniciar como un servicio de Windows. Puedes utilizar cualquier compilador que pueda generar archivos ejecutables, como GCC o Visual Studio.

    En general, crear un servicio de Windows en C es un proceso sencillo que no requiere el uso de .NET ni C#. Puedes utilizar la API de Windows directamente desde C y compilarla con cualquier compilador de C. Solo asegúrate de seguir los pasos básicos anteriores y probar exhaustivamente tu servicio antes de implementarlo en producción.

Comments are closed.