2011-12-21 95 views
2

我想創建一個簡單的Web窗體,它會給我一個屏幕上的服務重啓按鈕。在ASP.net中使用SQL Server SMO訪問被拒絕0x80070005

單擊該按鈕後,我創建了一個SMO對象來與SQL Server數據庫對話並嘗試停止並啓動MSSQLSERVER服務。一切順利,直到Stop()方法被調用,此時拋出異常,說明:

訪問被拒絕。 (從HRESULT異常:0X80070005 (E_ACCESSDENIED))

按鈕下的代碼如下:

// connect the to server 
ManagedComputer computer = 
    new ManagedComputer("172.16.150.52",@"Administrator","secret"); 

// return if there is a problem 
if (computer.Services["MSSQLSERVER"] == null) 
{ 
    PageErrorMessage = "Bad or missing service \"MSSQLSERVER\""; 
    return; 
} 

// get the SQL Server Service 
Service sqlServer = computer.Services["MSSQLSERVER"]; 

// is the server running? 
if (sqlServer.ServiceState == ServiceState.Running) 
    sqlServer.Stop(); 

// wait for it to stop completely 
int timeout = 0; 
while (sqlServer.ServiceState != ServiceState.Stopped || timeout <= 60) 
{ 
    Thread.Sleep(1000); 
    sqlServer.Refresh(); 
    timeout++; 
} 

if (timeout > 60) 
{ 
    PageErrorMessage = "Stop operation has timed out after 60secs"; 
    return; 
} 

// start it again! 
sqlServer.Start(); 

的IP地址,用戶名&密碼是100%正確。有誰知道爲什麼這會拋出一個AccessDenied異常?

+0

這是一個操作系統錯誤,而不是一個WMI或Smo的錯誤,所以你可能會在ServerFault上獲得更好的響應。看到這裏:http://technet.microsoft.com/en-us/library/ee692772.aspx#EEAA – Pondlife 2011-12-21 13:35:50

+0

我不知道它的操作系統是這樣的。我猜OP沒有實現處理UAC的代碼。 – 2011-12-24 11:47:29

回答

1

這聽起來像你錯過了UAC。通常,要執行系統範圍內的任務,例如重新啓動,關閉(可能還要啓動/停止服務),您必須獲得提高的特權,包括獲得令牌等。

查看本文內容 - http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx - 它幫助了我幾次。

http://www.codeproject.com/KB/vista-security/ElevatedPrivilegesDemand.aspx也可能有所幫助。

我只有自己做過這個客戶端 - 我不知道在服務器上運行時它是如何工作的。對於這一點,你可能想看一看:http://blogs.msdn.com/b/lightswitch/archive/2011/04/07/how-to-elevate-permissions-in-server-code-ravi-eda.aspx

如果它不是代碼,但配置,看看這個:http://www.lansweeper.com/kb/WMI-Access-is-denied.aspx

相關問題