【问题标题】:How to detect if a Window can be Shown?如何检测是否可以显示窗口?
【发布时间】:2010-10-02 17:53:43
【问题描述】:

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

我希望我的措辞正确:)

【问题讨论】:

    标签: .net windows-services


    【解决方案1】:

    您根本不应该从服务中执行此操作。首先,默认情况下服务无权访问桌面。您可以在 Vista 之前的 Windows 版本中更改此设置,方法是选中服务属性对话框中的“允许服务与桌面交互”复选框,但这是一个非常非常糟糕的主意。

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

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

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

    【讨论】:

    • 我真的很想避免运行两个单独的进程来实现这一点,但我想这是唯一的方法:(
    • @hmcclungiii:不要让它让你失望,这是^正确^的方式,这才是更重要的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多