2011-04-21 50 views
0

我有一个ASP.NET MVC2服务,它由基于cassini/http.sys的Web服务器托管。服务进程以本地管理员身份运行。为什么被冒充的身份拥有比原始身份少的权利?

不,我想读的使用服务的状态:

using (var sc = new ServiceController(_ServiceName)) 
{ 
    return sc.Status == ServiceControllerStatus.Running; 
} 

这个伟大的工程,然后冒充是关闭的。但我想使用Windows身份验证和模拟。所以当我添加

<identity impersonate="true" /> 

到web.config。对sc.Status的调用失败并带有InvalidOperationException。内部异常是Win32Exception/ACCESS_DENIED。

"System.InvalidOperationException" caught. 
Message=Cannot open service 'abcd' on computer '.' . 
Source=System.ServiceProcess 
StackTrace: 
    at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) 
    at System.ServiceProcess.ServiceController.Start(String[] args) 
    at System.ServiceProcess.ServiceController.Start() 
InnerException: System.ComponentModel.Win32Exception 
    Message=Access denied 
    ErrorCode=-2147467259 
    NativeErrorCode=5 
    InnerException: 

模拟身份与进程身份相同。那么为什么模仿的身份比流程身份拥有更少的访问权限呢?这怎么能够避免?

系统:Windows 7中,UAC启用

+0

所以你访问使用相同的本地管理员帐户从同一台计算机的服务,正确? – Jaymz 2011-04-21 15:33:07

+0

是的,它只有一台机器,并且只有一个用户帐户。 (登录帐户,服务进程帐户和模拟帐户都是一样的) – 2011-04-21 15:35:29

+0

我刚刚发现这个:“请注意,通过网络进行身份验证但未以交互方式登录的远程用户可以连接到SCM,但不执行需要其他访问的操作权限要执行这些操作,用户必须以交互方式登录,或者该服务必须使用其中一个服务帐户。“ [这里](http://msdn.microsoft.com/en-us/library/ms685981%28v=vs.85%29.aspx)。因此,由于模拟身份是远程身份,因此它不具备所需的访问权限。 – 2011-04-21 20:06:25

回答

0

也许您的服务器不trusted for delegation

+0

这是一台独立的电脑,没有域名/服务器 – 2011-04-21 17:02:19