2010-02-10 33 views
1

我正在构建一个Windows服务,该服务根据哪个Windows用户登录来执行不同的操作。如果我将服务安装在一个用户下,并将其设置为启动,则会为每个用户运行单独的实例登录并继续运行,即使当前有多个用户登录?相同的Windows服务是否按用户运行?

这是我想要的行为,但如果这是不可能的,我将不得不另谋计划。

而且一般情况下,每个用户登录会话都像它自己的独立环境一样吗?换句话说,如果我安装了一个通过命名管道与我的服务交互的驱动程序,那么当前登录的用户驱动程序发送的管道消息也会被其他登录用户下运行的其他服务实例接收到(假设他们确实运行不同的实例,如上所述)?还是他们完全独立的环境与他们自己的驱动程序/内核实例?

回答

1

至少从XP开始,服务只能有一个实例。当然,特权服务可以像其他用户一样创建流程,但它们不会是正式的服务。

+0

因此,如果我创建了特权服务,它会在Windows启动时还是第一个用户登录时启动?当这些用户登录后,我是否会为新用户启动一个新流程?在我的驱动程序示例中,我如何知道哪个用户执行了触发驱动程序与服务交互的操作?在服务规则他们都会为我工作得很好,我只需要解决这些细节。 – 2010-02-10 19:15:30

+0

服务有两种启动方式。在启动时,或“手动”。如果你想登录来触发它,你需要编写某种钩子(可能与GINA有关)来注意登录并启动你的服务。 – bmargulies 2010-02-10 19:20:38

+0

所以,请帮助我解决这个问题: 我有一个服务器上运行的Windows服务,它与管理员帐户(管理员)一起安装,但它被设置为以其他Windows帐户(admin2)开始。 当我使用admin2登录并停止Windows服务时,根据同一个WS的操作,我发现该服务仍在与另一个帐户(admin)一起运行。 我如何确保Windows服务只能运行一次? – Glegan 2014-11-03 23:27:50

3

如上所述,Windows服务有一个实例。默认情况下,它作为本地系统帐户运行,而不是作为任何特定用户(并且它无权访问单个用户的环境等)。它不从任何凭据继承当前登录的用户。您可以为该服务设置特定的用户凭据(例如通过服务控制管理器),以便像任何给定的用户一样运行该服务的一个实例。但你只有一个。