Windows服务与标准exe有什么不同?
Windows服务和标准exe有什么区别?
计算机启动后,Windows服务始终运行(只要configuration如此)。 一个标准EXE只在用户login时运行,如果用户注销,将会停止。
您将使用Windows服务来处理即使没有人login也需要运行的事情。
您将使用一个标准的EXE程序,用户将在login时运行。
Windows服务具有特殊的ServiceMain
function,并且必须正确响应服务控制pipe理器(SCM)命令才能起到服务的作用。 另一方面,一个常规的可执行文件有一个main
或WinMain
函数,不需要响应任何特定的控制命令。
如果你正在讨论实现一个后台操作,下面是我build议select一个服务或一个无窗口的.exe的标准:
select一个exe如果:
- 您需要它在每个用户的基础上运行,并且仅在用户login时运行
- 您需要它与Windows桌面(通知图标等)交互
- 它需要login用户的所有权限(不多也不less)
select一项服务,如果:
- 当没有人login时可能需要运行
- 它通常不需要每个用户的数据或特权
- 它只与networking通信
- 它需要揭露新的“安全”的对象。 具有自己的声明性访问控制列表(DACL)的对象限制对某些帐户/组的访问。
- 它需要特殊的权限,这可能对login用户不可用。
服务可能很容易成为安全漏洞,所以更喜欢.exe的服务。 有时你会需要两个。 病毒检查程序需要能够访问文件系统上的每个文件(当前用户可能无法做到这一点),但是还需要以通知对话框/popup窗口和工具的forms向用户提供信息任务栏图标。 服务不能直接与用户的GUI交互。 他们可以使用标准的Windows IPC(进程间通信)服务,例如pipe道和共享内存区域。 这些工具通常同时具有服务和每个用户的无窗口.exe,该服务使用Windowspipe道或共享内存区域与服务进行通信。
如果您想深入了解这些主题,请通过Keith Brown获得“编程Windows安全性”。
服务(通常)是一个没有UI的标准exe。 即使没有用户login到计算机,它也可以运行,并且它是访问权限,文件系统的视图不依赖于login的用户。
从EXE Binary的angular度来看,从编译器C库的angular度来看,Windows服务看起来就像一个标准的Unix程序或一个Windows控制台程序。 即与main()
入口点。 使服务不同的是Microsoft Windows(从registry通常在启动时)加载/调用它的方式。 服务可以(也应该)通过Windows API调用告诉SC.exe应用程序[服务控制pipe理器],服务是启动,停止,暂停等