在Windows服务中提示输入密码

时间:2012-06-07 18:51:54

标签: c# .net windows windows-services

当有人试图停止Windows服务时,如何提示输入密码和用户?

3 个答案:

答案 0 :(得分:2)

无法做到。

服务旨在在用户体验之外运行,不处理GUI交互。这是操作系统允许或禁止用户停止服务的原因。

答案 1 :(得分:2)

无法直接从服务中完成。但是,如果服务设置为与桌面交互,则可以由另一个应用程序管理该服务。因此,您可以使用监视服务的GUI创建第二个应用程序。当服务“Stopping”事件触发时,该服务可以在共享状态文件中设置一些值,并等待监视应用程序在状态文件中写入确认值。也许不是你正在寻找的东西,但我认为你可以得到你想要的结果。

答案 2 :(得分:1)

通常,没有理由这样做。默认情况下,只有管理员可以停止服务,如果服务可以完全停止,则要求管理员输入密码是没有意义的:他们是管理员,因此根据定义,他们有权做任何事情。

一个有意义的方案是,如果您希望普通用户能够在知道密码的情况下停止服务。这样,您可以让某人停止服务而不向他们授予对计算机的管理权限。 (即使这样,在大多数情况下,更改服务权限以允许有问题的用户停止服务的权利会更简单;但是,例如,您可能希望用户必须打电话给服务台给予密码。)

完成这项工作的秘诀在于服务有权在没有收到操作系统的停止请求的情况下以任何理由停止自身。因此,您可以编写一个程序,如果用户想要停止服务,则可以运行该程序。程序接受密码并通过某种形式的IPC(例如命名管道)将其发送到服务。如果密码正确,服务将停止。

您还可以配置服务,使其不接受停止请求,在这种情况下,管理员也需要密码才能很好地停止服务。但这并不能阻止他们通过终止服务流程,卸载服务并重新启动计算机来停止服务。