如何在没有控制台的 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,请查看 CreateProcess
和 CREATE_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?的主要内容,如果未能解决你的问题,请参考以下文章
如何在python脚本中默认情况下在第二个TFT屏幕上运行套接字服务器控制台,而不是在主TFT屏幕上?
如何使用 VB.net 获取 Windows 控制台应用程序的文本?