在没有管理员权限的情况下从应用程序控制 Windows 服务
Windows 服务提供了一种在后台运行长时间运行任务的便捷方法,无需用户干预。但是,默认情况下,启动或停止这些服务需要管理员权限。这对需要代表用户管理服务的应用程序造成了限制。
解决方案
这个问题的解决方案在于修改服务对象的权限。这允许应用程序与服务交互,而无需提升权限。以下是使用 C 的建议方法:
<code class="c++">wchar_t sddl[] = L"D:" L"(A;;CCLCSWRPWPDTLOCRRC;;;SY)" // default permissions for local system L"(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)" // default permissions for administrators L"(A;;CCLCSWLOCRRC;;;AU)" // default permissions for authenticated users L"(A;;CCLCSWRPWPDTLOCRRC;;;PU)" // default permissions for power users L"(A;;RP;;;IU)" // added permission: start service for interactive users ; PSECURITY_DESCRIPTOR sd; if (!ConvertStringSecurityDescriptorToSecurityDescriptor(sddl, SDDL_REVISION_1, &sd, NULL)) { // Handle error } if (!SetServiceObjectSecurity(service, DACL_SECURITY_INFORMATION, sd)) { // Handle error }</code>
说明
此代码打开指定服务的安全描述符并修改其 DACL(自由访问控制列表)。它添加了一个新的 ACE(访问控制条目),该 ACE 向交互用户(非管理员用户)授予“启动服务”权限。
要停止服务,请添加“停止服务”权限(WP ) 到列表中:
<code class="c++">L"(A;;RPWP;;;IU)" // added permissions: start service, stop service for interactive users</code>
通过修改服务对象的权限,您可以赋予应用程序无缝管理 Windows 服务的能力,而无需管理员提升。
以上是应用程序如何在没有管理员权限的情况下控制Windows服务?的详细内容。更多信息请关注PHP中文网其他相关文章!