2011-12-21 6 views
2

Я пытаюсь создать простую веб-форму, которая даст мне кнопку перезапуска службы на экране.Доступ запрещен 0x80070005 в ASP.net с использованием SQL Server SMO

После нажатия кнопки, я создаю объект 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

+0

Я не уверен, что это ОС как таковой. Я предполагаю, что OP не реализовал код для обработки UAC. –

ответ

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

Смежные вопросы