Unix 应用程序需要运行dbus\u g\u proxy\u new\u才能使用\u name?

Unix 应用程序需要运行dbus\u g\u proxy\u new\u才能使用\u name?,unix,glib,dbus,Unix,Glib,Dbus,在没有实现D-Bus方法的应用程序启动并运行的情况下,我是否可以调用dbus_g_proxy_new_作为_name? 我不确定这样做是好的做法,还是通常的做法。在我回答之前,我想指出。然而,答案也适用于(基本上是替代品) 对。本文讨论了所有者如何随着时间的推移而改变,但没有明确提到在通话时没有所有者的情况(最初的重点): 名称所有者可能会随着时间的推移而改变,例如在两个不同的方法调用之间,除非名称是唯一的名称。如果需要固定所有者,则需要请求当前所有者并将代理绑定到其唯一名称,而不是通用名称;请

在没有实现D-Bus方法的应用程序启动并运行的情况下,我是否可以调用dbus_g_proxy_new_作为_name?
我不确定这样做是好的做法,还是通常的做法。

在我回答之前,我想指出。然而,答案也适用于(基本上是替代品)

对。本文讨论了所有者如何随着时间的推移而改变,但没有明确提到在通话时没有所有者的情况(最初的重点):

名称所有者可能会随着时间的推移而改变,例如在两个不同的方法调用之间,除非名称是唯一的名称。如果需要固定所有者,则需要请求当前所有者并将代理绑定到其唯一名称,而不是通用名称;请参阅dbus\u g\u proxy\u new\u以了解\u name\u owner()

实际上,在D-Bus激活时使用它是非常常见的。查看的“客户端实现”部分。它包括以下片段(请注意注释):

在调用方法之前,D-Bus激活甚至不会被触发,因此很明显,在调用方法之前,名称不一定存在

/* This won't trigger activation! */
proxy = dbus_g_proxy_new_for_name (connection,
        "org.gnome.ServiceName",
        "/org/gnome/ServiceName",
        "org.gnome.ServiceName");

/* The method call will trigger activation, more on that later */
if (!org_gnome_ServiceName_echo_string (proxy, "The string we want echo-ed", &result, &error))
{
    /* Method failed, the GError is set, let's warn everyone */
    g_warning ("Woops remote method failed: %s", error->message);
    g_error_free (error);
    return;
}