如何在没有控制台的 Windows 上运行 D-Bus?

Posted

技术标签:

【中文标题】如何在没有控制台的 Windows 上运行 D-Bus?【英文标题】:how to run D-Bus on windows without console? 【发布时间】:2018-03-13 00:18:17 【问题描述】:

我正在 Windows 上移植一个 linux 应用程序,我需要在我的 win 会话上运行 dbus-daemon.exe

我的应用程序和 dbus-daemon.exe 工作正常,但后者仍然打开一个默认控制台,并且不熟悉 Windows 上的编程,我不知道如何摆脱它。

也许通过让它不可见?

【问题讨论】:

Windows 服务? 【参考方案1】:

默认情况下,Windows 会为控制台子系统编译的可执行文件打开一个控制台窗口(“子系统”本质上是可移植可执行文件格式的元数据,即 EXE/DLL)。所以你至少有两个选择:

    编译 Windows 子系统的dbus-daemon,如果你是编译的人。这是linker option。 启动dbus-daemon 进程,将CREATE_NO_WINDOW flag 传递给相关的API 函数(可能是CreateProcess)。如果您不直接使用 Windows API,请查看 CreateProcessCREATE_NO_WINDOW 在您使用的 API 中是如何公开的。例如,在 .NET 中,它是 ProcessStartInfo.CreateNoWindow 属性。

【讨论】:

感谢您的回答,但 1. 被排除在外(显然)因为 dbus-daemon.exe 在启动后立即退出。 我猜它会尝试写入标准流之一,但没有控制台窗口就无法使用 - 尝试重定向它们,如下所示:dbus-daemon.exe > dbus-daemon-stdout.txt 2> dbus-daemon-stderr.txt 我做到了,但它不起作用,例如dbus-daemon --config-file=xx < NUL: > NUL: 2> NUL: 与之前相同的结果... 那么,您必须自己调试它(dbus-daemon 无法启动的原因) - 我建议将标准流重定向到实际文件(而不是 NUL)并检查它们的内容,和/或在调试器下调试启动。 不幸的是,我认为你是对的。但我想避免这种情况:-(

以上是关于如何在没有控制台的 Windows 上运行 D-Bus?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows上初始化并运行Docker?

如何在python脚本中默认情况下在第二个TFT屏幕上运行套接字服务器控制台,而不是在主TFT屏幕上?

如何在服务器上运行没有 Windows 服务的计划作业?

如何使用 VB.net 获取 Windows 控制台应用程序的文本?

如何在没有远程桌面连接的 jenkins windows slave 上运行 GUI 测试?

如何在没有 nfs 的 Vagrant 上运行 Symfony2 应用程序(例如在 Windows 上)?