2010-01-24 76 views

回答

43

一旦计算机启动,Windows服务将始终运行(只要它已经这样配置)。标准EXE只在用户登录时运行,如果用户注销,将会停止。

你会使用的东西,总是需要甚至可以运行,如果没有人登录的窗口服务。

你可以使用一个标准EXE了,虽然登录的用户运行的程序。

2

一服务是(通常)是没有UI的标准exe。即使没有用户登录到计算机,它也可以运行,并且它的访问权限和文件系统视图不依赖于用户登录的内容。

+1

不是100%准确。服务必须满足一些额外的要求,而不是没有UI的标准exe。 – 2010-01-24 04:23:41

+0

是的一些要求,以及它可以访问的不同API,但仍然是标准的EXE。 – 2010-01-24 04:24:49

+0

SQL Server代理服务不具有交通灯界面吗?如果我没有弄错,那是一项服务吗? – LearningCSharp 2010-01-24 05:22:01

31

Windows服务具有特殊的ServiceMain函数,并且必须响应服务控制管理器(SCM)命令正确,以便作为服务发挥功能。另一方面,常规可执行文件具有mainWinMain函数,并且不需要响应任何特定的控制命令。

+5

技术上正确,但我认为它不会很好地回答这个问题。 (见Eric J的回答)。 – Ash 2010-01-24 05:11:00

+0

格雷格和埃里克的答案有效,但我只能将其中一个标记为正确:-( – LearningCSharp 2010-01-24 05:20:10

+1

我绝对认为这是一个比所选择的更正确的答案,另一个答案更好地回答了“什么是Windows服务”的问题。 – 2013-04-07 04:03:25

12

如果你在谈论实现后台操作,这里的标准是我建议选择一个服务或一个窗口少的.exe:

选择一个exe文件,如果:

  • 你需要它运行在每个用户的基础上,只有当用户登录
  • 你需要它来与Windows桌面(通知图标等)进行交互
  • 它需要所有日志记录的特权,在用户(不多,不少于)

选择一个服务,如果:

  • 它可能需要运行时没有人在
  • 记录它一般不需要每用户数据或特权
  • 它仅与通信网络
  • 它需要公开新的“安全”对象。具有自己的声明性访问控制列表(DACL)的对象限制对某些帐户/组的访问。
  • 它需要特殊的权限,可能对登录用户不可用。

服务能够轻松安全漏洞,所以喜欢的.exe对服务。有时你会需要两个。病毒检查程序需要能够访问文件系统上的每个文件(当前用户可能无法做到这一点),但它还需要以通知对话框/弹出窗口和工具的形式向用户提供信息任务栏图标。服务不能直接与用户的GUI交互。他们可以使用标准的Windows IPC(进程间通信)服务,例如管道和共享内存区域。这些工具通常具有服务和每个用户的无窗口.exe,该服务使用Windows管道或共享内存区域与服务进行通信。

得到“编程Windows安全”基思·布朗,如果你想潜入这些话题。

+0

Minor nit:DACL中的D代表Discretionary – 2010-01-24 04:58:01

+0

“它只与网络通信”,这是不正确的,服务可以做很多其他事情而不是网络访问 – Ash 2010-01-24 05:04:14

+1

并非所有的Win32/64服务都只与网络通信,但所有只需要与网络进行通信的守护进程在Win32/64上进行编程时几乎都可以最好地实现为服务。我希望列表描述服务有意义的场景,而不是限制Windows服务的每个用例。 – 2010-01-24 06:20:05

1

从EXE Binary的角度来看,从编译器的C库的角度来看,Windows服务看起来就像一个标准的Unix程序或Windows控制台程序。即与main()切入点。使服务不同的是Microsoft Windows(从注册表通常在启动时)加载/调用它的方式。服务可以(也应该)通过Windows API调用告诉SC.exe应用程序[服务控制管理器],服务启动,停止,暂停等。

相关问题