2010-07-09 27 views
0

我正在尝试使用ServiceController.GetServices()方法获取所有服务的列表。在控制台应用程序中,它工作正常,但如果我在Windows服务中调用此方法,则会得到一个空列表。这似乎是一个身份验证问题,但我使用了所有帐户选项(本地系统,本地服务,网络服务,用户[这是本地管理员]),没有运气。Windows服务中的ServiceController

有什么建议吗?

谢谢

+0

你如何检查列表是否为空? – Andreas 2010-07-09 11:53:45

+0

尝试获得单一服务(另一种+当前服务),并查看它是否先工作。获取当前服务正常工作,不确定是否获取有关其他人的信息:P – 2010-07-09 11:56:12

+0

@Andreas我正在使用套接字,并且我通过telnet发送命令。当命令是“list”时,它将返回所有服务的名称。当我将应用程序作为控制台应用程序时,一切正常,但Windows服务应用程序返回空。 – Feyyaz 2010-07-09 12:00:39

回答

1

同意,这必须是用户帐户权限问题。枚举需要通过调用本机OpenSCManager()API函数开始。这是一个非常特殊的功能,SDK文档指出需要管理员访问权限。你将不得不配置服务,并给它一个管理员登录。听起来像你已经试过这个。担心UAC,然后在serverfault.com上询问更多关于它的问题,推测安全专家的家。

+0

我试过Artiom的建议,我通过服务名创建了两个ServiceController对象,并且他们没有给我任何错误。所以问题是关于从Windows服务获取所有服务。顺便说一句,用户已经是管理员。谢谢 – Feyyaz 2010-07-09 13:17:19

+0

这些服务是否在远程机器上运行? – 2010-07-09 13:26:17

+0

不,他们是本地服务。简单的问题是ServiceController.GetServices()方法返回空列表。我仍然不明白这个问题:/。 – Feyyaz 2010-07-09 13:47:11

相关问题