我QtService上课有问题.我正在尝试构建Windows服务.我下载了文件并将它们包含在我的项目中.
现在,当我运行项目时(在QtCreator中)我收到消息
服务MyService无法启动.
该方法start()未执行.
我在实现结束时在文件qtservice.cpp中找到了上层消息QtServiceBase::exec().
你知道我为什么收到这条消息吗?
myservice.h:
#ifndef MYSERVICE_H
#define MYSERVICE_H
#include <QtService/qtservice.h>
#include <QCoreApplication>
#include <QDebug>
#include <QObject>
class MyService : public QtService<QCoreApplication>
{
public:
MyService(int argc, char **argv);
~MyService();
void start();
void pause();
void resume();
void stop();
private:
};
#endif // MYSERVICE_H
Run Code Online (Sandbox Code Playgroud)
myservice.cpp:
#include "myservice.h"
MyService::MyService(int argc, char **argv) : QtService<QCoreApplication>(argc, argv, "MyService")
{
qDebug() << "CONSTRUCTOR";
setServiceDescription("This is my service. ");
setServiceFlags(QtServiceBase::CanBeSuspended);
qDebug() << "CONSTRUCTOR 1";
}
MyService::~MyService()
{
qDebug() << "DECONSTRUCTOR";
try {
} catch (...) {
qCritical() << "An unknown error occured in deconstructor";
}
}
void MyService::start()
{
qDebug() << "START";
try {
QCoreApplication *app = application();
qDebug() << "Service started";
qDebug() << app->applicationDirPath();
} catch (...) {
qCritical() << "An unknown error occured in start";
}
}
void MyService::pause()
{
qDebug() << "PAUSE";
try {
qDebug() << "Service paused";
} catch (...) {
qCritical() << "An unknown error occured in pause";
}
}
void MyService::resume()
{
qDebug() << "RESUME";
try {
qDebug() << "Service resumed";
} catch (...) {
qCritical() << "An unknown error occured in resume";
}
}
void MyService::stop()
{
qDebug() << "STOP";
try {
qDebug() << "Service stopped";
} catch (...) {
qCritical() << "An unknown error occured in stop";
}
}
Run Code Online (Sandbox Code Playgroud)
main.cpp:
#include "myservice.h"
#include <QCoreApplication>
int main(int argc, char *argv[])
{
MyService service(argc, argv);
return service.exec();
}
Run Code Online (Sandbox Code Playgroud)
和.pro文件:
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ServiceTest
TEMPLATE = app
SOURCES += main.cpp\
myservice.cpp
HEADERS += myservice.h
include(QtService/qtservice.pri)
Run Code Online (Sandbox Code Playgroud)
你有没有把论点-exec传给服务?(单击"项目",然后单击"运行设置",然后填写"参数"字段).
该服务希望作为服务运行,除非您传递-exec告诉它作为应用程序运行的参数(因此您可以对其进行调试).
其他的命令行参数-install,-uninstall,-pause,等你安装服务后用-install,那么你可以使用Windows管理工具运行它.