2009-10-22 181 views
1

我们使用ServiceController对象来查询我们的Service是否正在运行。我们正在执行查询的Web应用程序使用模拟进行安全/登录。在Web应用程序的C#中查询Windows服务状态

System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController("myService"); 
return sc.Status 

使用管理员帐户,查询成功。使用有限帐户(非管理员),查询失败,并显示“服务myService在计算机上未找到”的消息。“”......但这只在Windows Server 2003中失效,而不在Windows XP中。

我已经谷歌搜索并在MSDN检查。我没有发现任何与Windows Server 2003中ServiceController的使用相关的内容。

任何想法?

编辑:如果有一种方法来查询服务状态而不使用不涉及“安全”特权的ServiceController,那可能适用于我们。我们只需要获得服务的状态。

UPDATE:

我创建了一个简单的控制台应用程序将打印服务的状态。我使用“runas”命令使用管理员和非管理员帐户运行应用程序。它都在Windows Server 2003中工作......这意味着这是一个权限问题,没有正确传递给Web应用程序中的ServiceController调用?也许IIS安全的东西?

谢谢!

+1

另一种选择是服务更新数据库/文本文件,然后从您的Web应用程序中查询?这样你永远不必担心权限,特别是如果你需要将它移动到另一台服务器等等。 – seanxe

+0

好的解决方法! – Ian

+0

另一件事是检查Windows事件日志以查看是否有任何特定的安全相关消息。 –

回答

0

我认为web应用程序应该在沙箱中运行。由于安全问题,允许访问在本地计算机上运行的服务并不是您应该做的事。

也许你可以告诉我们你想做什么,还有另一种解决方案?