2015-10-15 155 views
0

我想使用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()立即退出,並且出現錯誤「必須從主線程調用」。

我該如何克服這一點?以前非常感謝。

回答

0

將我自己的服務類與「QT解決方案」中的QtService類進行比較,解決了我的問題。

總而言之,我需要將StartServiceControlDispatcher()函數放入QThread中,並以exec()僅在SCM的上下文中運行時才執行的方式更改我的服務類的方法。

相關問題