【问题标题】:Windows Service vs Windows Application - Best PracticeWindows 服务与 Windows 应用程序 - 最佳实践
【发布时间】:2010-11-03 06:08:45
【问题描述】:

什么时候应该使用 Windows 服务,什么时候应该使用在通知区域中运行的“后台应用程序”?

如果我没记错的话,我的设计决定是,任何需要在用户登录计算机之前运行的应用程序都应该是一项服务。对于其他一切,请使用后台应用程序。我的决定对吗?

此外,如果我的后台应用程序需要“管理员权限”,我会使用清单升级。作为服务运行还有其他特定优势吗?

【问题讨论】:

    标签: c# windows winforms windows-services


    【解决方案1】:

    我的一般经验法则如下

    • 如果它需要始终运行,它就是一项服务。
    • 如果需要在特定用户帐户、网络服务、本地系统下运行,通常是服务(或 COM+ 应用程序)
    • 如果用户需要对其进行一些控制,它通常是通知区域应用程序。
    • 如果它需要通知用户某事,那就是通知区域应用程序

    当您需要将某些东西作为系统帐户运行并与之交互时,乐趣就来了。 IIS 就是一个很好的例子,它是一个服务,但管理是一个应用程序 - 它需要在启动时运行,它需要访问用户无法正常访问的特定内容 (c:\inetpub),但是用户需要能够启动、停止和配置它。

    【讨论】:

    • 当您需要将某些东西作为系统帐户运行并与之交互时,乐趣就来了。这实际上是我的问题...我正在尝试从我的服务中转储日志信息并在通知用户的 Windows 应用程序上解析它们...不确定我的设计是否正确...
    • 嗯,有很多方法可以做到这一点,我自己的偏好,因为我经常使用它们,是让服务托管一个 WCF 端点并以这种方式控制它。
    • 我想添加到列表中:如果它需要在没有用户登录计算机的情况下运行,它是一项服务。
    【解决方案2】:

    如果应用程序具有关键目的并且不应该(或很少)关闭,我会将应用程序设计为服务。 Windows 服务提供了良好的崩溃恢复选项、良好的通知(请参阅服务属性中的恢复选项卡)。

    使用服务的一个很好的理由是它们可以在任何用户下运行(所以如果你 将它们部署在您远程的服务器上,您可以在启动服务后安全地注销,而不必担心应用程序也会关闭。

    我还结合桌面应用程序设计服务,该应用程序可以与服务交互,并可用于在运行时监控或重新配置服务。这样,您就可以在服务中享受托盘应用程序的所有好处。

    但是,您不应滥用服务,而应仅将它们用于重要应用程序。

    【讨论】:

      【解决方案3】:

      我相信您的决定几乎是正确的,但是,我会再添加一个条件。以 mysqld 服务为例(在这种情况下您可以选择,但大多数人将其作为服务运行)。它作为服务运行,因为您希望通过可能的多个应用程序随时访问该服务。重要的是,它能够响应所有调用它的应用程序,而且它本身并不重要,除了等待为其他应用程序提供服务。

      这只是我在做决定时会考虑的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多