在沒有管理員權限的情況下從應用程式控制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中文網其他相關文章!