暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[Qt系列第2篇]Qt5编写Windows服务程序

悟空的筋斗云 2017-04-23
1006

写在前面


Microsoft Windows 服务(即,以前的 NT 服务)使用户能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。  这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。  这些功能使服务非常适合在服务器上使用,每当需要使用不会影响在同一台计算机上工作的其他用户的功能时也适用。  还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。本文主要讲述如何在Qt5下面编写Windows服务程序。



准备工作


由于Qt5标准类库没有提供相关类来实现Windows服务程序编程,调研后发现qt-solutions提供了解决方案,因此我们从这里(https://github.com/qtproject/qt-solutions)下载了项目源码。



步骤


1.从qt-solutions中提取qtservice源码

A)解压 qt-solutions-master.zip,我们需要的是qtservice这个目录的源码


qtservice的目录结构如下,看来也自带了一些例程(examples目录)

B)使用qtservice

通读INSTALL.txt后我们知道有两种使用方式,默认是直接包含项目源码,另外一种是编译成动态库,我们这里选择后者,并将其整合到Qt标准库下面。

打开cmd命令行窗口,切换到项目根目录,

c:\dev\project\qt\qtservice>configure.bat --help
Usage: configure.bat [-library]
.
-library: Build the component as a dynamic library (DLL). Default is to
          include the component source directly in the application.
          A DLL may be preferable for technical or licensing (LGPL) reasons.
.


接着我们配置为DLL模式,

c:\dev\project\qt\qtservice>configure.bat -library
Configuring to build this component as a dynamic library.
.
This component is now configured.
.
To build the component library (if requested) and example(s),
run qmake and your make or nmake command.
.
To remove or reconfigure, run make (nmake) distclean.
.

在我们的项目目录下多出一个config.pri的文件,这个就是我们执行配置命令后生成的。


C)使用Qt Creator打开qtservice项目文件


然后执行qmake,构建,等待DLL生生成,生成后的DLL被安装到Qt库目录下了,


另外,我们需要将生成的 .lib文件以及.pdb文件拷贝到 C:\dev\qt\Qt5.8.0\5.8\msvc2015\lib


接下来,我们在Qt头文件目录创建QtSolutions的头文件目录,并将qtservice相关的头文件放到该目录下,这样我们就可以跟使用其他Qt类一样使用qtservice了。




成果演示


使用Qt Creator创建一个service项目来测试一下qtservice

A)编写简单的测试代码


B)运行

首先,将所需动态库拷贝到服务程序生成目录


然后,安装服务程序,必须以管理员权限打开cmd,


打开任务管理器查看安装的服务,处于已停止的状态,那是我们没有设置成自动启动,我们可以手动启动看看,


我们打开事件查看器看看我们记录的系统消息是否正常,同样地,我们暂停服务或者重启服务都会记录我们代码里面logMessage的消息


写在后面


我们的测试程序很简单,只是打几条系统日志而已,当然这只是一个引子而已,需要根据实际情况编写所需的代码。


文章转载自悟空的筋斗云,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论