2013-01-20 54 views
0

我需要單向IPC方法來處理2個Windows應用程序(都在同一臺機器上)。 如果我的應用程序是基於CLI的+ windows服務,哪一個更好。什麼Windows IPC方法更適合短命令?

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設置爲我的主題。

回答

1

WM_COPYDATA消息或自定義消息代碼(如果您不打算傳輸文本或二進制數據)將工作。使用WM_COPYDATA消息可以傳輸二進制數據,而Windows可以跨越流程邊界本身進行復制。

在GUI - > CLI應用程序中,您需要在CLI過程中創建一個不可見的窗口來接收消息(如果您希望消息被髮送並且不從GUI應用程序發送)。如果您只是將消息從GUI發佈到CLI,那麼PostThreadMessage()函數就足夠了,並且不需要窗口。

在CLI - > GUI方向上,根本沒有複雜性,因爲窗口已經(通常)在GUI應用程序中存在。

+0

謝謝,這是相當有趣的解決方案。我知道WM_COPYDATA,但從來沒有想過隱藏的窗口... – denys