Windows服务与标准exe有何不同?

时间:2010-01-24 04:18:17

标签: windows-services service

Windows服务和标准exe之间有什么区别?

5 个答案:

答案 0 :(得分:44)

Windows服务始终在计算机启动后运行(只要它配置完毕)。标准EXE仅在用户登录时运行,并在用户注销时停止。

即使没有人登录,您也可以将Windows服务用于始终需要运行的内容。

您可以将标准EXE用于用户在登录时运行的程序。

答案 1 :(得分:33)

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

答案 2 :(得分:12)

如果您正在讨论实施后台操作,以下是我建议选择服务或无窗口的标准.exe:

如果选择exe:

  • 您需要在每个用户的基础上运行,并且仅在用户登录时才需要
  • 您需要它与Windows桌面(通知图标等)进行交互
  • 它需要登录用户的所有权限(不多也不少)

在以下情况下选择服务:

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

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

如果您想深入了解这些主题,请获取Keith Brown的“Windows安全编程”。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

从EXE二进制文件的角度来看,从编译器的C库的角度来看,Windows服务看起来与标准的Unix程序或Windows控制台程序完全相同。即main()入口点。使服务与众不同的是Microsoft Windows(通常在启动时从注册表中)加载/调用它的方式。服务可以(并且应该)通过Windows API调用告诉SC.exe应用程序[Service Control Manager],该服务已启动,停止,暂停等。