我正在开发一个系统,其中各种 Windows 服务在专用网络中的不同计算机上运行。网络中的任何计算机都可以运行与这些服务远程交互的客户端应用程序。作为我们软件包的一部分,我们的功能可以让用户查看网络中的任何服务是否遇到问题并重新启动其中的任何服务。
为了让它工作,我们使用了用户模拟和服务控制器类:我们要求用户提供托管服务的计算机上的管理帐户的用户名和密码,模拟该管理员,然后使用 ServiceController 重新启动服务。这在大多数情况下都有效,但我们无法在我们的某些服务器上模拟管理员。我的理解是,要使用户模拟工作,被模拟的帐户必须在本地计算机上或 Active Directory 组的一部分,但有问题的服务器只有它们自己的本地帐户。
我注意到LogonUser
启动模拟的方法有很多参数,并开始使用它们来查看是否有任何参数可以解决我的问题。当我尝试将 LogonType 值设置为“New Credentials”(9)时,我看到了一些奇怪(但可能有用)的行为:
- 我可以在以前无法使用的服务器上重新启动服务
- 如果我尝试重新启动已关闭的服务并提供不正确的密码,该服务仍会重新启动。
为什么我会看到这种行为?如果这样做的原因是好的,我可能会使用此设置来完全摆脱要求用户完全登录的情况。