2011-04-21 86 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