2009-12-29 8 views
5

Nous avons une application C++ existante qui utilise WinAPI (appelons-la "SvcApp"). Nous avons une autre application WinAPI C++ appelée "MgrApp" qui installe et démarre "SvcApp" en tant que service Windows. Cependant, nous aimerions remplacer "SvcApp" par une application Qt. Je peux être mal informé, mais il semble qu'il n'est pas possible d'utiliser <windows.h> à partir d'une application Qt, donc il semble que je ne peux pas copier et coller tout le code existant de "MgrApp" ... ou puis-je?Comment installer un service Windows en utilisant Qt?

Pour résumer, nous devons faire ce qui suit de notre application Qt:

  • marche/arrêt d'un service Windows
  • Installer/désinstaller un service Windows

Répondre

2

Vous pouvez certainement utiliser Windows API (y compris windows.h) dans les applications Qt. Dans les coulisses, Qt utilise l'API Windows. La façon normale de gérer les applications Qt multiplateformes est d'utiliser les blocs #ifdef. Qt fournit des macros telles que Q_OS_WIN32 et Q_WS_MAC à cette fin. Regardez à travers le code source Qt et vous verrez cette méthode utilisée partout.

EDIT: Vous pouvez également utiliser les utilitaires de ligne de commande pour installer/désinstaller et démarrer/arrêter des services Windows. De cette façon, vous pouvez simplement utiliser un QProcess pour l'appeler, et ne pas avoir à plonger dans le WinAPI (qui est toujours agréable)

1

Je ne sais pas spécifiquement à propos de l'en-tête windows.h, mais en général, vous pouvez inclure du code spécifique à la plate-forme dans n'importe lequel de votre programme Qt. Le programme cesse simplement d'être portable sur plusieurs plates-formes. (Ce serait généralement une meilleure idée de placer la partie spécifique à la plate-forme dans un fichier séparé, mais si le point entier du programme doit être un service Windows, alors ...)

10

Il existe déjà une solution pour cela - QtService.

Documentation ici: http://qt.nokia.com/doc/solutions/4/qtservice/

Télécharger ici: ftp://ftp.qt.nokia.com/qt/solutions/lgpl/qtservice-2.6-opensource.zip

+0

Merci, bon de savoir sur ce – JimDaniel

+0

@Mihai Limbăşan savez-vous ce que la licence est? – sara

+0

@sara La dernière version est aussi [ici chez Gitorious] (http://qt.gitorious.org/qt-solutions/qt-solutions/trees/master/qtservice). C'est LGPL (dans la source) et [aussi BSD] (http://qt.nokia.com/products/qt-addons/solutions-archive/). – tricasse

Questions connexes