2009-12-29 19 views
5

Abbiamo un'applicazione C++ esistente che utilizza WinAPI (chiamiamolo "SvcApp"). Abbiamo un'altra applicazione C++ WinAPI chiamata "MgrApp" che installa e avvia "SvcApp" come servizio di Windows.Come installare un servizio Windows usando Qt?

Tuttavia, vorremmo sostituire "SvcApp" con un'applicazione Qt. Potrei essere disinformato, ma sembra che non sia possibile utilizzare <windows.h> da un'applicazione Qt, quindi sembra che non posso semplicemente copiare e incollare tutto il codice esistente da "MgrApp" ... o posso?

In sintesi, abbiamo bisogno di fare quanto segue dal nostro Qt app:

  • Start/Stop di un servizio di Windows
  • Installare/disinstallare un servizio di Windows

risposta

2

È possibile utilizzare Windows API (incluso windows.h) in Qt Applications. Dietro le quinte Qt utilizza l'API di Windows. Il modo normale in cui vengono gestite le app Qt multipiattaforma è l'utilizzo dei blocchi #ifdef. Qt fornisce macro come Q_OS_WIN32 e Q_WS_MAC per questo scopo. Guardare attraverso il codice sorgente Qt e vedrete questo metodo utilizzato in tutto il luogo.

MODIFICA: è possibile anche esaminare le utilità della riga di comando per l'installazione/disinstallazione e l'avvio/arresto dei servizi di Windows. In questo modo puoi semplicemente usare un QProcess per chiamarlo, e non dover scavare nel WinAPI (che è sempre bello)

1

Non lo so in particolare sull'intestazione di windows.h, ma in generale è possibile includere codice specifico della piattaforma in qualsiasi programma Qt. Il programma cessa di essere portatile su piattaforme diverse. (In genere sarebbe meglio impostare separatamente la parte specifica della piattaforma in un file separato, ma se l'intero punto del programma è un servizio Windows, quindi ...)

10

Esiste già una soluzione per questo - QtService.

documentazione qui: http://qt.nokia.com/doc/solutions/4/qtservice/

Scarica qui: ftp://ftp.qt.nokia.com/qt/solutions/lgpl/qtservice-2.6-opensource.zip

+0

Grazie, buona da sapere su questo – JimDaniel

+0

@Mihai Limbăşan sai che cosa la licenza è? – sara

+0

@sara L'ultima versione è anche [qui a Gitorious] (http://qt.gitorious.org/qt-solutions/qt-solutions/trees/master/qtservice). È LGPL (nella fonte) e [anche BSD] (http://qt.nokia.com/products/qt-addons/solutions-archive/). – tricasse

Problemi correlati