【发布时间】:2014-02-16 07:49:34
【问题描述】:
我想在服务中获取服务名称。大致思路是获取进程id,并将进程id与WMI、ServiceCotroller或EnumServicesStatusEx() API枚举的服务进行比较。
问题是该服务在域帐户下运行(它不是本地管理员)。当我想枚举运行服务中的服务时,枚举中缺少运行服务本身!
如果我将服务帐户移至本地管理员,则会找到正在运行的服务。所以这不是代码问题。 (如果代码问题,行为应该是相同的:找不到服务。)
如果我将逻辑提取到控制台应用程序(或通过 powershell)并在服务帐户下运行应用程序或 powershell,也会找到该服务。所以这不是权限问题。 (如果权限问题,行为应该相同:未找到服务。)
当服务帐户不是管理员和 INSIDE 服务时,无法枚举该服务。这是非常电线问题。
我从 MSDN 检查 EnumServicesStatusEx 的文档,发现本地管理员的 SC_MANAGER_LOCK 比本地经过身份验证的用户多。是这个原因吗?但我无法将锁与服务枚举联系起来。
或者有人请指出一种在服务内查询服务名称的方法。
谢谢。
顺便说一句,它在 Windows 2008 R2 上。
我发现了一个相关问题:How to get name of windows service from inside the service itself。 1st answer 对我来说是不可接受的。我想提供一个通用库并且无法控制安装程序。 2nd answer 跟我的想法一样。我想这应该和我的结果一样。
【问题讨论】:
标签: c# winapi powershell service permissions