c++ - 使用系统 DBus 的 registerService 失败(但适用于 session DBus)

标签 c++ qt windows-7 dbus

Qt 5.2,Win 7

当我注册一个服务QDBusConnection::registerService (const QString & serviceName)时,它失败了(“false”)系统 DBus 连接(QDBusConnection::systemBus ()),但适用于 session DBus 连接和对等连接。

这就是我启动服务器的方式:dbus-daemon.exe --system --address=tcp:host=127.0.0.1,port=45000

QtService application cannot connect to system bus when running as a service 开始,我已经尝试 ( see here ) 更改 system.conf

<auth>ANONYMOUS</auth>
<allow_anonymous/>

我找到了另一个 similar question here 。我也尝试过那里描述的政策。

有什么提示可以解决这个问题,或者至少获得准确的错误消息?该方法的“错误”并没有真正帮助。

-- 编辑 ---

下面的代码给我一条错误消息 not connected to server 用于连接。 QDBusConnection::systemBus() 方法不会自动连接(与 session 、对等方一样)吗?

            QDBusConnection con = QDBusConnection::systemBus();
            if (!con.registerService(ServiceName))
            {
                qCritical() << con.lastError().message();
                qFatal("Cannot register DBus service, server started? dbus-daemon.exe --system --address=tcp:host=192.168.0.133,port=45000");
            }

--- 编辑 2,JB0x2D1 的commet ----

我同意,也认为它与.conf文件有关。

  1. 您提供的链接和上面我提供的链接都指向 to the same example 。我在那里尝试了 .conf 文件(当然,根据我的名字更改了服务名称)
  2. 发现了另一个有趣的例子:https://wiki.ubuntu.com/DebuggingDBus。不幸的是没有成功

很难说问题是否与 Windows 相关,大多数示例显然是 Linux 驱动的。想知道“允许任何人使用任何东西”的最小 conf 是多少。

最佳答案

我在这个 link 找到了答案有帮助。

根据链接提供的答案,您需要在正在运行的操作系统上安装 dbus-launch(Ubuntu:sudo apt-get install dbus-x11)。

在终端上运行 dbus-launch 将启动 dbus session 总线,并且还将在终端上打印出这种性质的文本:

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-RKvgH2uzDI,guid=37cfdf614fe9c896cc8790160018b974

DBUS_SESSION_BUS_PID=18717

在运行需要 session 总线执行 IPC 的应用程序之前,您需要将终端打印的文本导出为环境变量。

希望这对您有所帮助。

关于c++ - 使用系统 DBus 的 registerService 失败(但适用于 session DBus),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023899/

相关文章:

c++ - 使用 C++ 或 Qt 将 SQL LIKE 表达式转换为正则表达式

c++ - 如何删除已打开句柄的文件?

git - 我如何找到 git bin 文件夹?

c++ - incredibuild 不使用其他代理

c++ - Doxygen STL 支持使用点图

C++ 动态对象类比较

c++ - Qt调整窗口大小以适应滚动区域问题中的纵横比

qt - 在QDesigner的中心设置小部件

c++ - 从指针到成员的类模板推导

Python 无法在桌面上获取光标位置 (x, y)