如何检测是否可以显示窗口?

时间:2009-01-21 17:23:56

标签: .net windows-services

当应用程序作为Windows服务(用.NET编写)运行时,检测用户是否登录的最佳方法是什么,以及用户何时登录,以便能够开始显示必要的对话框,或者当用户注销时,可以阻止显示对话框吗?

我希望我正确地说明了这一点:)

2 个答案:

答案 0 :(得分:4)

你不应该从服务中做到这一点。首先,默认情况下,服务无法访问桌面。您可以在Vista之前的Windows版本中通过选中服务的属性对话框中的“允许服务与桌面交互”复选框来更改此项,但这是一个非常非常糟糕的主意。

在Vista中,服务根本无法与桌面交互。

您假设当时机器上只有一个交互式用户,但情况并非总是如此。由于终端服务,您可以让多个用户登录交互式会话。

你应该做的是创建一个小客户端程序,该程序在用户登录时启动。该程序将通过一些分布式技术(如Remoting或WCF,我推荐后者)与服务进行交互。基于它从服务器接收的通信,该客户端程序可以启动对话框和用户界面元素以与用户交互。

答案 1 :(得分:0)

无论用户是否登录,您都无法显示任何用户界面的UI。出于安全原因,该服务将在不同的桌面上运行 - 可以解决此问题,但请不要吨。最好的办法是有一个单独的程序来显示你的UI,然后在两者之间使用某种形式的进程间通信。