QtService无法启动

QtService could not start

本文关键字:启动 QtService      更新时间:2023-10-16

我对QtService类有问题。我正在尝试构建Windows服务。我下载了这些文件,并将它们包含在我的项目中。

现在,当我(在QtCreator中)运行该项目时,我收到消息

服务MyService无法启动。

不执行方法start()

我在QtServiceBase::exec()实现结束时的qtservice.cpp文件中找到了上层消息。

你知道我为什么收到这个消息吗?

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

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";
    }
}

main.cpp

#include "myservice.h"
#include <QCoreApplication>
int main(int argc, char *argv[])
{
    MyService service(argc, argv);
    return service.exec();
}

.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)

是否已将参数-exec传递给服务?(单击"项目",然后单击"运行设置",然后填写"参数"字段)。

服务想要作为服务运行,除非您传递-exec参数,该参数告诉它作为应用程序运行(这样您就可以调试它)。

其他命令行参数包括-install-uninstall-pause等。使用-install安装服务后,可以使用Windows管理工具运行该服务。