【发布时间】:2010-10-02 17:53:43
【问题描述】:
当应用程序作为 Windows 服务(用 .NET 编写)运行时,检测用户是否登录以及用户登录时能够开始显示必要的对话框,或者当该用户已注销时,可以阻止显示对话框?
我希望我的措辞正确:)
【问题讨论】:
标签: .net windows-services
当应用程序作为 Windows 服务(用 .NET 编写)运行时,检测用户是否登录以及用户登录时能够开始显示必要的对话框,或者当该用户已注销时,可以阻止显示对话框?
我希望我的措辞正确:)
【问题讨论】:
标签: .net windows-services
您根本不应该从服务中执行此操作。首先,默认情况下服务无权访问桌面。您可以在 Vista 之前的 Windows 版本中更改此设置,方法是选中服务属性对话框中的“允许服务与桌面交互”复选框,但这是一个非常非常糟糕的主意。
在 Vista 中,服务根本无法与桌面交互。
您假设当时机器上只有一个交互式用户,但情况并非总是如此。由于终端服务,您可以让多个用户登录交互式会话。
你应该做的是创建一个小的客户端程序,它在用户登录时启动。这个程序将通过一些分布式技术(如 Remoting,或 WCF,我推荐后者)与服务交互。根据从服务器接收到的通信,该客户端程序可以启动对话框和用户界面元素以与用户进行交互。
【讨论】:
无论用户是否登录,您都无法从您的服务中显示任何 UI。出于安全原因,该服务将在不同的桌面上运行 - 可以解决此问题,但请不要吨。最好的办法是有一个单独的程序来显示您的 UI,然后在两者之间使用某种形式的进程间通信。
【讨论】: