尝试访问在Windows系统服务中创建的QtDBus对象时超时

问题描述:

我想使用QT/MinGW通过DBUS与其他应用程序(来自freedesktop.org)进行通信来创建Windows系统服务。目前DBUS作为“服务”运行,意思是它使用instsrv/srvany工具作为服务安装(然而,DBUS稍后将获得它的bus-service-win)。由于作为服务运行,DBUS作为系统总线运行。尝试访问在Windows系统服务中创建的QtDBus对象时超时

我写了一个简单的应用程序来确保DBUS正在工作(使用1个方法在简单对象上创建并使用QDBusViewer执行)。那么,那工作。

接下来我尝试在服务中使用ServiceMain中的相同DBUS内容,其中ServiceMain是我们自己创建的类的成员)。我可以在QDBusViewer中看到该对象,但只要我选择它,QDBusViewer在暂停一段时间后报告超时(无回复)。

我已经在我的测试应用程序中看到了这种行为,并且可以通过在创建DBus对象后在app.exec()上创建一个QCoreApplication“app”和“block”来修复它。我在服务中尝试了同样的方法,但得到了警告,说QCoreApplication不是在主线程中创建的,问题仍然存在。

我试图在调用StartServiceControlDispatcher()并在ServiceMain中运行app.exec的函数中创建“app”,但app.exec()立即退出,并且出现错误“必须从主线程调用”。

我该如何克服这一点?以前非常感谢。

将我自己的服务类与“QT解决方案”中的QtService类进行比较,解决了我的问题。

总而言之,我需要将StartServiceControlDispatcher()函数放入QThread中,并以exec()仅在SCM的上下文中运行时才执行的方式更改我的服务类的方法。