2009-12-16 31 views
10

我写了一个服务,网站可以使用ExecuteCommand方法远程执行命令。我注意到,如果网站没有在远程机器上的管理员用户下运行,那么我会在尝试执行命令时遇到权限被拒绝异常。servicecontroller权限

servicecontroller类甚至不允许您指定任何验证参数。这是正确的吗?是否有一组特定的用户需要的privelages而不是管理员,因为我不愿意将我们集群中的所有webservers用户添加为服务器上的本地管理员?

回答

5

您必须暂时模拟当前线程的管理员用户,然后恢复。在MSDN中查找WindowsIdentity.Impersonate()

ServiceController将使用当前线程的主体来创建注册表和服务控制管理器调用,并且如果要操纵服务,则必须确保将其设置为管理用户。缺点是您需要在帐户的某处存储密码,请确保您使用的是SecureString而不是以纯文本格式存储密码。

+0

如果可能,我建议让用户在每次运行命令时都输入他们的管理员密码。这样你就避免了存储它。不过,这可能不适用于你的情况。 – John 2015-05-14 19:10:46