2011-03-22 59 views
0

我正在使用VB6并使用ADSI查询Windows服务的状态(正在运行或未运行)。看到这篇MS文章:http://msdn.microsoft.com/en-us/library/aa746322(v=vs.85).aspx使用ADSI查询服务状态 - 需要哪些权限?

对于USERS组成员的用户,我收到了抛出的异常。我相信这是对GetObject方法:

Set comp = GetObject("WinNT://.,Computer") 

唯一的例外是:80070005“常规访问被拒绝错误”

运行相同的代码为电力用户的成员,然而,工作得很好。

将所有用户提升为超级用户不是一种选择。为了使此功能成功运行,我需要授予哪些确切的权限?

我试着运行procmon.exe,并且无法从输出中确定发生了什么或发生了否定。

谢谢!

编辑:这是在XP SP2上运行。

回答

2

听起来就像你遇到UAC障碍。我不熟悉IADsService,但确定Windows服务是否正在运行几乎没有必要。你有没有考虑过使用API​​函数来查询你的服务?在使用SERVICE_QUERY_STATUS打开的服务上尝试QueryServiceStatus

+0

我的歉意,我应该包括,这是在XP(编辑包括这个小窍门)。感谢您的链接,我会检查该界面(不知道为什么它没有出现在我以前的搜索)。 – MarkL 2011-03-23 13:23:14

+0

好的,只是在XP上测试过的服务。有限的用户帐户是Users组的成员,并且可以从正在运行的服务查询信息,因此ADSI可能会在幕后请求太多信息。仅供参考,但内置的Guest帐户无法查询服务信息,您可以在此处执行的最佳操作是获取正在运行的进程名称的列表。我建议使用API​​调用,以便更好地控制过程。 – 2011-03-23 22:46:41

+0

是的,也适合我。而且我还注意到了访客/用户帐户的差异。 谢谢! – MarkL 2011-03-24 15:18:14

0

不需要重量级管理服务或API调用。壳牌自动化接口提供了这一段时间(Win2K或更高版本,Shell32.dll中V 5.0起或更高版本):

With CreateObject("Shell.Application") 
    MsgBox .IsServiceRunning("MSMQ") 
End With 

工作正常,我没有抬高。

相关问题