2011-08-02 75 views
2

ControlService API允許向Win32服務發送控制代碼。但是,如果我需要發送(並接收)不止一個控制代碼呢?在用戶模式GUI Win32應用程序和Win32服務之間建立通信以交換任意數據的最佳方式是什麼? (假設我可以編譯服務和​​應用程序)。該方法應該可以從Windows 2000工作到Windows 7,並且它應該適用於管理員和標準用戶。謝謝!使用Win32服務進行進程間通信

+0

最好的辦法是最好的解決你的問題。您可以使用DCOM或SOAP Web服務,套接字或命名管道,或... – bmargulies

+0

編輯:我應該google更好:發佈問題後,我發現下面的文章,解釋它一切都很好: http://www.codeproject.com/KB/vista-security/interaction-in-vista.aspx –

回答

0

你幾乎可以使用任何IPC機制。如果您的服務和應用程序基於.net,那麼最常見的解決方案是使用WCF。對於本地代碼服務和應用程序,一個非常常見的解決方案是命名管道。但是最好的選擇取決於您的具體使用需求。

+0

服務會話隔離怎麼樣?命名管道是否允許跨會話進行通信? –

+0

@Andrei是的,這沒問題。命名管道需要被正確保護,但是跨會話沒有限制。 –

+0

好的,謝謝,我會嘗試一個命名管道,看看它是怎麼回事。如果它運作良好,我會接受你的回答:-) –

1

聽起來好像您打算讓服務響應遠程請求。爲此,您可以使用命名管道,如前所述。然而,命名管道比TCP套接字稍微複雜一些。

如果您採用TCP套接字編程(socket()bind(),listen()等),您將能夠將該知識移植到其他平臺。

+0

一個誠實的問題。爲什麼命名管道比套接字更復雜?我想了解更多。 –

+0

訪問由匿名用戶命名的管道在Windows 7時間框架中變爲只讀:http://blogs.technet.com/b/nettracer/archive/2010/07/23/why-does-anonymous-pipe-access -fail-on-windows-vista-2008-windows-7-or-windows-2008-r2.aspx –

+0

但是'''socket()'''是永遠的。 –