Windows服务与Windows应用程序 – 最佳实践

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

如果我没有错,我的devise决定是,在用户login到计算机之前需要运行的任何应用程序都应该是一个服务。 对于一切使用后台应用程序。 我的决定是对的吗?

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

我的一般经验法则如下

  • 如果需要一直运行,这是一项服务。
  • 如果需要在特定的用户帐户下运行,网络服务,本地系统,通常它是一个服务(或一个COM +应用程序)
  • 如果用户需要对其进行一些控制,则通常是通知区域应用程序。
  • 如果需要通知用户,则是通知区域应用程序

有趣的是当你需要以系统帐户运行某些东西时,也可以与之交互。 IIS是一个很好的例子,它是一个服务,但是管理是一个应用程序 – 它需要在启动时运行,它需要访问用户无法正常访问的特定事物(c:\ inetpub),但是用户需要能够启动,停止和配置它。

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

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

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

但是,正如我所说的,您不应该滥用服务,只能使用它们来提供应用程序。

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

只是在做出决定时我会考虑的。