【问题标题】:Show status window from Windows Service从 Windows 服务显示状态窗口
【发布时间】:2011-04-29 20:18:07
【问题描述】:

我有一个用 C# 用 .NET 编写的 Windows 服务。我从这里知道:Launching GUI App from Windows Service - Window Does Not Appear。我可以允许服务与桌面交互。但是,在 Windows 7 中,我只是得到一个对话框,告诉我“在这台计算机上运行的程序正在尝试显示一条消息”。该服务是一个更新服务(想想 Windows 更新)我想弹出一个对话框告诉用户正在进行更新并通知他们进度。

1) 我可以在 Windows 7 中显示来自服务的窗口吗?

2) 我可以从服务内部检测它是否可以与桌面交互吗?

谢谢, 斯科特

【问题讨论】:

  • 出于安全原因,微软不推荐这种方法。推荐的方法是在用户会话中运行一个监控应用程序,该应用程序与您的服务通信并负责 GUI 交互。
  • 您想交流什么? Windows 服务发送要由 GUI 应用程序显示的消息。或者其他方式? GUI App 控制/配置 Windows 服务?
  • 服务正在应用更新,所以,我想我需要让服务向 UI 发送消息以向用户提供状态。但是,我明白了。让服务在后台,并在用户会话中运行状态监视器。
  • 仅供参考,您可以通过检查 System.Environment.UserInteractive 属性来检测是否可以与桌面交互。但是,在 Vista+ 中,即使 UserInteractive 为 true,您也无法从服务中直接访问 GUI,因此对于 XP 以后的任何东西都没有用处

标签: c# .net windows-services


【解决方案1】:

您无法显示服务的 UI。

解决此问题的常规方法是在用户桌面上运行标准应用,并让服务使用您首选的 IPC 形式与该应用通信。

【讨论】:

    【解决方案2】:

    查看.NET Remoting

    【讨论】:

    • .NET 远程处理在 .NET 1.1 中非常棒(好吧,当时真的不行)。如果您需要在 Windows 中的进程之间进行通信,请使用 WCF。
    • 我发现 IPC 在 .NET 远程处理中比 WCF 更容易实现。对于仅显示来自服务的消息这样微不足道的事情,我个人认为 WCF 不值得付出额外的努力。
    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多