鉴于以下方法,我正在尝试启动/停止IIS 7应用程序池。我可以在本地系统上成功完成此操作,但当我将其放到我们的Windows 2008服务器上时,只有在尝试停止服务时才会出现错误 - 启动工作正常:
[NoCache]
public ActionResult EnableAppPool(Models.ActionRequest actionRequest)
{
try
{
if (ModelState.IsValid && actionRequest.ActionRequestPassword == ConfigurationManager.AppSettings["NewsfeedAdminPassword"])
{
bool enableNewsfeed = false;
enableNewsfeed = Convert.ToBoolean(actionRequest.EnableNewsfeedAppPool);
string sPath = "IIS://" + ConfigurationManager.AppSettings["MachineName"] + "/W3SVC/AppPools/" + ConfigurationManager.AppSettings["AppPoolName"];
Console.WriteLine(sPath);
DirectoryEntry w3svc = new DirectoryEntry(sPath);
if (enableNewsfeed)
{
w3svc.Invoke("Start");
}
else
{
w3svc.Invoke("Stop");
}
}
}
catch (Exception ex)
{
throw ex;
}
return null;
}
错误信息如下:
我意识到这是一个权限问题,但我不确定我需要授予哪个用户访问权限。拒绝访问。(来自 HRESULT: 0x80070005 (E_ACCESSDENIED)) 说明: 当前 Web 请求的执行期间发生未经处理的异常。请检查堆栈跟踪以获取有关错误以及代码中起源的位置的更多信息。
异常详细信息: System.UnauthorizedAccessException: 拒绝访问。(来自 HRESULT: 0x80070005 (E_ACCESSDENIED))
ASP.NET 未被授权访问所请求的资源。请考虑向 ASP.NET 请求标识授予对资源的访问权限。ASP.NET 具有基本进程标识(通常为 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 和 IIS 7 上的 Network Service,以及 IIS 7.5 上配置的应用程序池标识),如果应用程序不是模拟,则使用该标识。如果应用程序通过模拟进行身份验证,则标识将是匿名用户(通常为 IUSR_MACHINENAME)或已经过身份验证的请求用户。
FYI:我已经启用了IIS 6 Metabase和WMI兼容性。