【问题标题】:Prompt for password in a windows service在 Windows 服务中提示输入密码
【发布时间】:2012-06-07 18:51:53
【问题描述】:

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

【问题讨论】:

  • 你到底为什么想要那个?但是不,没有直接的方法可以做到这一点,因为 Windows 服务不绑定到 Windows GUI。
  • 假定任何拥有停止服务所需权限的人都具有管理控制权,并且几乎可以为所欲为。不需要额外的密码。
  • 以错误的方式解决这个问题。服务应仅限于管理员。如果某人是他们机器上的管理员,他们应该被允许启动和停止他们想要的任何东西。
  • 我想把它作为一个 Windows 服务项目来做。这没有任何解决方案吗?在c#中

标签: c# .net windows windows-services


【解决方案1】:

这是不可能的。

服务旨在在用户体验之外运行,并且不处理 GUI 交互。这是由操作系统决定允许或禁止用户停止服务的事情。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 几年前我写了一个程序来做这些事情。我看看能不能帮你找到。
    • 非常感谢。我会等的。
    • 但是如果 GUI 应用程序要被用户停止怎么办?我不想那样。
    • 如果用户有权停止服务或监视器,他们可以。这可能更难停止。但是,如果该服务定期检查以确保监控应用程序正在运行并在没有运行时启动它......那你就成功了。
    • GUI 进程无需一直运行,如果用户想停止服务,只需启动该进程即可。
    【解决方案3】:

    通常,没有理由这样做。默认情况下,只有管理员可以停止服务,如果服务可以完全停止,那么向管理员询问密码是没有意义的:他们是管理员,所以根据定义,他们有权做任何事情.

    一种有意义的情况是,如果您希望普通用户在知道密码的情况下能够停止服务。这样,您可以让某人停止服务,而无需授予他们对计算机的管理权限。 (即便如此,在大多数情况下,更改服务权限以允许相关用户有权停止服务会更简单;但也许,例如,您希望用户必须致电帮助台得到密码。)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2012-07-25
      • 2018-12-02
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 2016-04-08
      相关资源
      最近更新 更多