2009-12-29 23 views
5

Tenemos una aplicación C++ existente que usa WinAPI (llamémosla "SvcApp"). Tenemos otra aplicación C++ WinAPI llamada "MgrApp" que instala e inicia "SvcApp" como un servicio de Windows.¿Cómo instalar un servicio de Windows usando Qt?

Sin embargo, nos gustaría reemplazar "SvcApp" con una aplicación Qt. Es posible que esté mal informado, pero parece que no es posible usar <windows.h> desde una aplicación Qt, por lo que parece que no puedo simplemente copiar y pegar todo el código existente de "MgrApp" ... ¿o no?

En resumen, tenemos que hacer lo siguiente de nuestra aplicación Qt:

  • Start/Stop un servicio de Windows
  • instalar/desinstalar un servicio de Windows

Respuesta

2

Definitivamente puede usar Windows API (incluyendo windows.h) en aplicaciones Qt. Detrás de escena, Qt usa la API de Windows. La manera normal en que se manejan las aplicaciones Qt multiplataforma es mediante el uso de bloques #ifdef. Qt proporciona macros como Q_OS_WIN32 y Q_WS_MAC para este fin. Mire a través del código fuente de Qt y verá que este método se usa en todas partes.

EDITAR: También puede considerar el uso de las utilidades de línea de comandos para instalar/desinstalar e iniciar/detener servicios de Windows. De esta forma, puede usar un QProcess para llamarlo y no tener que profundizar en el WinAPI (que siempre es bueno)

1

No sé específicamente sobre el encabezado windows.h, pero en general puede incluir código específico de plataforma en cualquiera de sus programas Qt. El programa simplemente deja de ser portátil en todas las plataformas. (Por lo general, sería una mejor idea separar la parte específica de la plataforma en un archivo separado, pero si el objetivo del programa es ser un servicio de Windows, entonces ...)

10

Ya existe una solución para eso: QtService.

Documentación aquí: http://qt.nokia.com/doc/solutions/4/qtservice/

Descargar aquí: ftp://ftp.qt.nokia.com/qt/solutions/lgpl/qtservice-2.6-opensource.zip

+0

Gracias, bueno saber acerca de esta – JimDaniel

+0

@Mihai Limbăşan ¿sabes lo que es la licencia? – sara

+0

@sara La última versión también es [aquí en Gitorious] (http://qt.gitorious.org/qt-solutions/qt-solutions/trees/master/qtservice). Es LGPL (en la fuente) y [también BSD] (http://qt.nokia.com/products/qt-addons/solutions-archive/). – tricasse

Cuestiones relacionadas