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

时间:2009-06-16 07:36:09

标签: c# windows winforms windows-services

我应该何时使用Windows服务,何时可以使用在通知区域中运行的“后台应用程序”?

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

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

3 个答案:

答案 0 :(得分:23)

我的一般经验法则如下

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

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

答案 1 :(得分:5)

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

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

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

但是,你不应该滥用服务,只能像我所说的那样使用它们用于cirtical应用程序。

答案 2 :(得分:3)

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

在做出决定时我也会考虑一些事情。

相关问题