【问题标题】:How to make my service be stopped only by an admin?如何让我的服务仅由管理员停止?
【发布时间】:2015-03-30 14:52:44
【问题描述】:

我有一个作为 Windows 服务运行的 c++ 应用程序。我想确保此服务只能由管理员关闭。这是怎么做的? (一个 cmd 命令是我正在寻找的,尽管任何其他帮助也会很好) 提前非常感谢:)

【问题讨论】:

  • 除管理员外没有人可以停止服务您的意思是什么需要以管理员身份运行 cmd 直到停止服务
  • 您不必做任何事情。新服务的默认 ACL 仅允许管理员发送停止请求。如果您的服务允许非管理员用户停止它,那么您做错了什么,我们需要更多详细信息来找出原因。 (安装服务的代码是最好的选择。)

标签: c++ cmd windows-services


【解决方案1】:

不知道这是否是您正在寻找的,但也许它会有所帮助:

Preventing users from stopping a particular service with a GPO.

有一些允许 GPO 脚本的小助手,例如:

Five Command Line Tools for Managing Group Policy

这可能不仅仅是一个简短的命令,但它应该做你想做的事:限制用户访问服务配置。


可能还有另一种方法可以做到这一点,它会更容易:您可以使用管理员帐户的详细信息创建或更新服务。在服务创建/配置方面有各种命令行工具,但 microsofts sc.exepassword 选项的使用可能就是您所需要的:

密码=(字符串)

密码字符串。如果使用 LocalSystem 以外的帐户,则需要这样做。

但是...

我不会这样做。首先,我不确定使用管理员帐户的服务是否真的受到其他访问的限制。但它肯定会改变你的服务所拥有的权限。我不知道你的服务做什么,以及它运行的权限是否重要,但这可能是个问题。

如果您更改服务配置,您会立即更改该服务的各种内容。

如果您使用 GPO 策略,您只需更改对服务的访问权限。


这就是理论。在实践中......

...我不得不承认,我自己无法创建和运行所需的服务。我试图在服务结构中打包一些 python 行,结果发现比以前更多的问题。即使使用用户名和密码创建服务也有点棘手,我尝试了各种命令行工具来做到这一点(抱歉,我不记得任何名字,我删除了这个绝望尝试的所有数据).

由于服务创建似乎不是您的问题,请查看此 GPO 脚本的结果。

【讨论】:

  • 如果您需要从命令行更改或查看服务的 ACL,您可以使用 sc sdsetsc sdshow。服务帐户密码与它无关。您还可以根据您的第一个链接通过组策略更改 ACL,但这只有在您需要一次更改大量机器时才有意义。对于单台机器,您可以使用命令行或服务管理工具。 (不过,在这种情况下,OP 无论如何都要求默认发生的事情,所以真的不清楚问题是什么。)
  • @HarryJohnston:感谢您澄清这一点!
猜你喜欢
  • 2014-09-19
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 2012-06-22
  • 2019-07-30
  • 2014-04-07
  • 2018-03-13
相关资源
最近更新 更多