什么Windows IPC方法更适合短命令?

时间:2013-01-20 22:41:45

标签: winapi ipc command-line-interface

我需要一种方法用于2个Windows应用程序的IPC方法(两者都在同一台机器上)。 如果我的应用程序基于CLI + Windows服务,哪一个更好。

P.S。我在单独的线程中在目标进程(CLI应用程序)中实现了消息队列。并通过PostThreadMessage从源流程(GUI应用程序)发布我的消息 所以。当两个应用程序都是从同一个用户运行时 - 一切正常。当我通过本地服务用户下的任务计划程序运行我的目标应用程序时,我收到1444错误代码(错误的线程ID)。
有什么想法吗?

P.P.S。来自MSDN

  

此线程必须具有SE_TCB_NAME权限才能将消息发布到属于具有相同本地唯一标识符(LUID)但位于不同桌面的进程的线程。否则,该函数将失败并返回ERROR_INVALID_THREAD_ID。

     

此线程必须与调用线程属于同一桌面,或者属于具有相同LUID的进程。否则,该函数将失败并返回ERROR_INVALID_THREAD_ID。

因此。我应该确定如何从我的源进程设置SE_TCB_NAME到我的线程。

2 个答案:

答案 0 :(得分:1)

WM_COPYDATA消息或自定义消息代码(如果您不打算传输文本或二进制数据)将起作用。 WM_COPYDATA消息允许您传输二进制数据,Windows可以跨进程边界进行复制。

在GUI中 - >您需要在CLI进程中创建一个不可见窗口以接收消息的CLI应用程序(如果您希望消息是SENT而不是从GUI应用程序发布)。如果您只是将消息从GUI发送到CLI,那么PostThreadMessage()函数就足够了,不需要窗口。

在CLI中 - > GUI方向完全没有复杂性,因为窗口已经(通常)存在于GUI应用程序中。

答案 1 :(得分:0)

还有一个很好的解决方案 - 来自boost库的Message Queue