在Vista以前的Windows版本中,您可以让Windows Service与当前登录的桌面用户进行交互,以便在服务屏幕上轻松显示信息。在Windows Vista中,为了安全性添加了会话0以将服务与桌面隔离开来。在服务和在Session 0之外运行的应用程序之间进行通信的简单方法是什么?到目前为止,我通过使用TCP/IP在两者之间进行通信来解决这个问题,但它似乎是一种马虎的做法。如何在Windows Vista Session 0和桌面之间进行通信?
6
A
回答
4
您也可以使用共享内存或命名管道来方便IPC。从概念上讲,这与TCP/IP类似,但您不必担心发现未使用的端口。
您必须确保您创建的命名对象的前缀为“全局”,以允许它们被所有会话访问,如here所述。
AFAIK无法让服务直接与桌面进行交互。
3
的确,出于安全原因,不再可以直接与“桌面”进行通信。无论如何,当你在一台拥有多个活跃用户+远程会话的计算机中时,究竟是什么“桌面”?
解决该问题的一般方法是使用通过某种RPC机制(TCP/IP,IPC,.Net远程处理通道之一等)进行通信的服务应用程序。这是一种痛苦,但我认为好处值得改变。
1
对于服务与桌面交谈,你几乎坚持使用RPC机制之一。 .NET远程处理机制(IpcServerChannel)不难为此实现。
此外,使用.NET,桌面应用程序可以将消息直接发送到ServiceController.ExecuteCommand的服务。这些命令由服务通过ServiceBase.OnCustomCommand接收。这更容易做到,如果控制服务是您唯一的要求,那将是您所需要的。
相关问题
- 1. 如何在桌面和WP7之间使用Wcf进行通信?
- 2. Delphi 2009:如何在Vista下的Windows服务和桌面应用程序之间进行通信?
- 3. 如何在Silverlight和桌面应用程序之间进行通信?
- 4. 如何在ASP.net页面和JSP页面之间进行通信
- 5. 如何在Windows和主应用程序之间进行通信?
- 6. 如何在Windows应用程序和Silverlight之间进行通信?
- 7. 如何在内容脚本和面板之间进行通信
- 8. Windows服务和桌面应用程序之间的通信
- 9. Android:如何与Windows桌面应用程序进行通信?
- 10. 如何在ViewModels之间进行通信?
- 11. 如何在帧之间进行通信?
- 12. flex:在桌面应用程序中的ActionScript和JavaScript之间进行通信
- 13. 在JavaScript和Servlet之间进行通信
- 14. 在UIDatePicker和UITableView之间进行通信
- 15. 在C++和C#之间进行通信?
- 16. 在login.aspx和default.aspx之间进行通信
- 17. 如何在Windows服务之间进行通信
- 18. 通过本地网络在.NET桌面应用程序之间进行通信
- 19. 如何在Firefox插件和android进程之间进行通信?
- 20. 在Windows服务和Exchange服务器之间进行通信
- 21. 在iphone和windows pc之间进行通信?
- 22. 如何在tabhost和新行为之间进行通信
- 23. linux和windows之间的串行通信
- 24. 如何通过HTTP和HTTPS在页面之间进行通信/共享会话
- 25. 如何在Windows Vista和W7中使用安全桌面?
- 26. 如何在WP7和Android之间进行通信(任何库?)
- 27. 在城域和桌面之间建立通信
- 28. 如何在Windows窗体应用程序和网站之间进行通信?
- 29. 如何使用WCF在应用程序和Windows服务之间进行通信?
- 30. 如何在ASP.NET wep应用程序和Windows服务之间进行通信?