代码之家  ›  专栏  ›  技术社区  ›  Joel Martinez

Windows服务或托盘/通知图标?

  •  2
  • Joel Martinez  · 技术社区  · 14 年前

    我想写一个应用程序,将,给定一些网络输入,模拟鼠标移动,点击,键盘输入。我希望如何以及为什么这样做是一个不同的讨论:-)我希望听到的是,对于这样的应用程序/服务,什么样的模式更可取?

    • 我应该做一个windows服务 坐在后台 系统?
    • 或者我应该做一个 tray app 那个 坐在盘子里听着 操纵用户的输入?

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

    有什么我应该预料或记住的吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Sébastien Nussbaumer    14 年前

    亚伦给出了所有的理由,为什么你不能没有托盘应用程序,但为什么要增加一个服务的复杂性与应用程序通过IPC通信?

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

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

        2
  •  8
  •   Aaron Klotz    14 年前

    如果你打算在Vista和Windows 7上运行你的代码,一个Windows服务是不够的,因为它们不能再与用户桌面交互了。如果要处理用户输入,则需要在用户会话中运行程序。

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

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

        3
  •  3
  •   Community    7 年前

    正如亚伦建议的那样,让Windows服务监视网络。

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