如何獲得Windows服務的'Handle',以便從Windows應用程序傳遞Memory Mapped消息。都是用Delphi編寫的。手柄 - Windows服務
回答
服務的句柄不是你在這裏需要的。內存映射文件被命名爲內核對象。所以你需要爲你的文件映射確定一個名稱,並使用它來鏈接你的兩個進程。
當您調用CreateFileMapping
來創建文件映射或打開由其他進程創建的現有文件映射時,您將該名稱作爲最後一個參數傳遞。您需要使用Global\
名稱空間前綴來確保文件映射位於全局名稱空間中,並可在不同會話中訪問。
內存映射文件是IPC在服務和桌面之間的不尋常選擇。人們通常會期望看到命名的管道或套接字。
請注意'CreateFileMapping()'[文檔](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537.aspx)中的以下內容:「在全局中創建文件映射對象來自會話零以外的會話的名稱空間需要「SeCreateGlobalPrivilege」特權。「因此,應該在應用中的服務和'OpenFileMapping()'中使用'CreateFileMapping()',因爲應用不可能具有'SeCreateGlobalPrivilege'特權,除非它作爲管理員運行。 –
我一直在使用TcpIp套接字的IPC,但必須處理防火牆不必要地阻止我的應用程序。命名管道也會有類似的問題。如果我使用內存映射郵件防火牆不會阻止我的應用程序。通訊速度可能非常高,我需要其他應用程序立即響應。 –
使用文件映射在資源上會更重,而且我需要接收應用程序的事件被激活,如wmcopydata() –
- 1. windows手柄方向改變
- 2. XNA處理,Windows服務,句柄,GraphicsDevice
- 3. 關閉手柄/存儲手柄
- 4. 獲取手柄
- 5. 手柄和DCB
- 6. 手柄的AsyncTask
- 7. 凌空手柄onErrorResponse
- 8. 在Windows中連接遊戲手柄
- 9. 無法手動啓動C#Windows服務
- 10. 手動實現IoC和Windows服務
- 11. 如何手動創建Apache Windows服務
- 12. 手柄「(空)」在Newtonsoft.JSON
- 13. 在.NET/C中渲染手柄模板服務器端#
- 14. C#.NET Web服務手柄3嵌套響應
- 15. 手柄單擊事件自定義服務器控件
- 16. SpineJS手柄服務器側導軌模型驗證
- 17. 什麼是「手柄」?
- 18. WCF服務與Windows服務
- 19. 手柄gradle這個任務依賴
- 20. 手柄記錄
- 21. 手柄角4
- 22. 手柄的actionPerformed
- 23. 手柄條件
- 24. 手柄區別
- 25. 手柄SAX parserexception
- 26. 手柄的entites
- 27. 手柄修改
- 28. 手柄wordrap deliminator
- 29. 手柄線或不
- 30. 如何解決C#Windows服務中的句柄泄漏問題
['OpenService'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms684330(v = vs.85).aspx)? – TLama
@TLama:'OpenService()'不返回可以發送消息的句柄。但是,如果消息不需要任何參數,它會返回一個可以與'ControlService()'一起使用的句柄。 –
@雷米,我知道它的目的。我已經放棄了該評論,因爲'OpenService'調用返回的'SC_HANDLE'是我在討論Windows服務時唯一能想到的句柄。具體問題是如何獲得服務句柄(儘管這不是一個正確的問題)。 – TLama