在 windows 上指定 dbus 会话地址

Specify dbus session address on windows

Windows (https://code.google.com/p/dbus-windows-installer/downloads/list) 上的 DBus 默认 session.conf 使用 <listen>autolaunch:scope=install-path</listen>,顾名思义,它使用 dbus-daemon 可执行文件的当前路径以某种方式确定会话地址。

有没有办法改为指定显式路径?也许是 tcp:?

经过多次尝试,我找到了解决办法。尽管 Windows 的 1.4.3 DBus 版本(至少目前)在 https://code.google.com/p/dbus-windows-installer/downloads/list 可用,但它确实支持 tcp: 语法。

安装 DBus-Windows-Installer-1.4.1-2.exe 会做两件事:

  1. 它在 C:\Program Files (x86)\DBus
  2. 中提供了 DBus 库和默认配置
  3. 它将 C:\Program Files (x86)\DBus\bin 添加到 %PATH%

拥有后者是必要的,这样您的应用程序就可以在 运行 时访问 DBus DLL 和 EXE。要使此安装使用 tcp: 语法,您必须

  1. C:\Program Files (x86)\DBus\etc\session.conf编辑为<listen>tcp:host=localhost,port=54321,family=ipv4</listen>
  2. C:\Program Files (x86)\DBus\bin\dbus-env.bat编辑为set DBUS_SESSION_BUS_ADDRESS=tcp:host=localhost,port=54321,family=ipv4
  3. 从首先执行 dbus-env.bat 然后 运行 dbus-daemon.exe --session
  4. 的环境启动会话守护进程
  5. (可选)从首先执行 dbus-env.bat 然后 运行 dbus-monitor.exe --session
  6. 的环境中启动会话监视器
  7. 从首先执行 dbus-env.bat 然后实际上 运行 执行您的应用程序的环境启动您的应用程序

正如我上面所说,DBus 1.4.3 已经很老了。事实上,根据 https://code.google.com/p/support/wiki/ReadOnlyTransition,它甚至可能很快就无法下载。在撰写本文时,最新的稳定分支是 1.10。因此,这里是构建您自己的最新 DBus

的说明
  1. 安装Visual Studio
    • 任何版本 2010 及更高版本都应该足够了,包括免费的 Express 版本
  2. 安装CMake

  3. 获取 libexpat

  4. 获取DBus源
    • git 克隆 git://anongit.freedesktop.org/git/dbus/dbus
    • cd dbus
      • 我们称它为 ${dbusSrcDir}
    • git 签出 dbus-1.10
      • 这是当前的稳定分支
  5. 启动 VS2015 的开发人员命令提示符
    • cd ${dbusSrcDir}
    • CD ..
    • mkdir dbus-build
    • cd dbus-build
    • "c:\Program Files (x86)\CMake\bin\cmake.exe" -G "NMake Makefiles" -DCMAKE_INCLUDE_PATH:PATH="${expatDir}\Source\lib" -DCMAKE_LIBRARY_PATH:PATH="${expatDir}\ Bin" -DDBUS_BUILD_TESTS:BOOL=OFF -DDBUS_DISABLE_ASSERT:BOOL=ON -DDBUS_USE_OUTPUT_DEBUG_STRING:BOOL=ON -DDBUS_ENABLE_DOXYGEN_DOCS:BOOL=OFF ..\dbus\cmake
    • nmake
  6. 此时,您可以执行 nmake install 安装到 C:\Program Files (x86)\DBus 或者您可以通过以下方式制作可分发的 "deploy package"
    • mkdir c:\temp\dbus-deploy
    • mkdir c:\temp\dbus-deploy\bin
    • mkdir c:\temp\dbus-deploy\share
    • mkdir c:\temp\dbus-deploy\share\dbus-1
    • 复制bin\dbus-1-3.dll c:\temp\dbus-deploy\bin
    • 复制bin\dbus-daemon.exe c:\temp\dbus-deploy\bin
    • 复制bin\dbus-env.bat c:\temp\dbus-deploy\bin
    • 复制bin\dbus-launch.exe c:\temp\dbus-deploy\bin
    • 复制bin\dbus-monitor.exe c:\temp\dbus-deploy\bin
    • 复制bin\dbus-send.exe c:\temp\dbus-deploy\bin
    • 复制 ${expatDir}\Bin\libexpat.dll c:\temp\dbus-deploy\bin
    • 创建一个 c:\temp\dbus-deploy\share\dbus-1\session.conf 包含通常的内容,其中包括 <listen>tcp:host=localhost,port=54321,family=ipv4</listen>
    • c:\temp\dbus-deploy\bin\dbus-env.bat编辑为set DBUS_SESSION_BUS_ADDRESS=tcp:host=localhost,port=54321,family=ipv4
  7. 要在您的应用程序中使用 "the deploy package",请修改 %PATH% 以指向您的 "deploy package" bin 目录,并确保在执行任何操作之前获取 dbus-env.bat。