【问题标题】:Windows Service or Tray/NotifyIcon?Windows 服务或托盘/NotifyIcon?
【发布时间】:2010-11-21 14:02:37
【问题描述】:

我想编写一个应用程序,该应用程序将在给定一些网络输入的情况下模拟鼠标移动、点击和键盘输入。我要如何以及为什么要这样做是一个不同的讨论:-) 我想从 SO 那里听到的是,对于这样的应用程序/服务来说,更可取的模型是什么?

  • 我是否应该创建一个 Windows 服务 坐在后台运行 系统?
  • 或者我应该做一个tray app 坐在托盘里听着 操纵用户的输入?

我还没有开始研究它,所以我想可能会绊倒我的一些事情与没有交互式会话和/或权限的服务有关。

我应该预料或记住什么?

【问题讨论】:

    标签: windows-services hook notifyicon


    【解决方案1】:

    如果您打算在 Vista 和 Windows 7 上运行您的代码,那么 Windows 服务是不够的,因为它们无法再与用户桌面交互。如果您要操作用户输入,则需要在用户会话中运行一个程序。

    另一种方法是编写一个用于监控网络事件的服务,在用户登录时启动客户端,并使用 IPC 在两者之间进行通信。

    编辑:NetworkService 应该足以提供服务权限。

    【讨论】:

    • 是的,这就是我害怕的,至少我的怀疑得到了证实。我应该将服务作为网络服务运行,还是应该在本地用户帐户下运行?在 IPC 上,我可以只使用 WCF 服务从一个进程到另一个进程,还是有更好的机制?顺便说一句,我会使用 C#/.NET 编写这些应用程序
    【解决方案2】:

    按照 Aaron 的建议,让 Windows 服务监控网络。

    至于用户会话中进程的 IPC,您可以使用 WCF,命名管道可能是最好的传输方式,但您需要以正确的方式设计它以跨越会话边界。使 Service 进程成为 WCF 服务,具有双工契约:用户会话进程调用服务进行注册,然后通过回调契约将事件传递回用户会话进程。 See this question for an explanation of the issues.

    【讨论】:

      【解决方案3】:

      Aaron 给出了所有论点,为什么你不能没有托盘应用程序,但为什么要增加通过 IPC 与应用程序通信的服务的复杂性呢?

      当您需要运行代码时,即使没有用户登录,服务也会很有用。这里不是这种情况,对吧?

      除非您必须操纵同时登录的多个用户的输入,否则我只会使用托盘应用程序来执行监控网络事件和操纵用户输入的任务,这对我来说更简单。

      【讨论】:

      • 赏金是自动授予的,但这实际上说服了我只去托盘 :-) 谢谢 Sébastien
      猜你喜欢
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2013-08-06
      • 2012-04-28
      • 1970-01-01
      相关资源
      最近更新 更多