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

时间:2015-10-15 15:50:21

标签: windows qt service dbus

我想使用QT / MinGW创建一个Windows系统服务,它通过DBUS与其他应用程序通信(来自freedesktop.org)。目前,DBUS作为“服务”运行,意思是它使用instsrv / srvany工具安装为服务(但是,DBUS将在以后获得它的总线服务获胜)。自从作为服务运行以来,DBUS作为系统总线运行。

我编写了一个简单的应用程序来确保DBUS正常工作(使用1方法在简单对象上创建并使用QDBusViewer进行处理)。嗯,这很有效。

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

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

我尝试在调用StartServiceControlDispatcher()的函数中创建“app”并在ServiceMain中运行app.exec,但app.exec()立即退出,并显示错误“必须从主线程调用”。< / p>

我怎么能克服这个?在此之前非常感谢。

1 个答案:

答案 0 :(得分:0)

将我自己的服务类与来自&#34; QT解决方案&#34;的QtService类进行比较解决了我的问题。

毕竟我需要将StartServiceControlDispatcher()函数放入QThread并以一种只在SCM上下文中明确运行时才执行exec()的方式更改服务类的方法。