我想使用asp.net c#在Web应用程序中回收IIS 6的应用程序池。
protected void Page_Load(object sender, EventArgs e)
{
//Recycle IIS 6's App Pool
Recycle("localhost", "appPool_02");
}
void Recycle(string machine, string appPoolName)
{
string path = "IIS://" + machine + "/W3SVC/AppPools/" + appPoolName;
DirectoryEntry w3svc = new DirectoryEntry(path);
w3svc.Invoke("Recycle", null);
}
“appPool_02”是另一个应用程序池名称,上面的代码在“appPool_01”上运行。
当我使用上面的代码时,发生了一个错误:
拒绝访问。(HRESULT异常:0x80070005(E_ACCESSDENIED)) 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。
异常详细信息:System.UnauthorizedAccessException:拒绝访问。(HRESULT异常:0x80070005(E_ACCESSDENIED))
ASP.NET无权访问所请求的资源。考虑将资源的访问权限授予ASP.NET请求标识。 ASP.NET具有基本进程标识(通常是IIS 5上的{MACHINE} \ ASPNET或IIS 6上的网络服务),如果应用程序未模拟,则使用该标识。如果应用程序是模拟通过,则标识将是匿名用户(通常是IUSR_MACHINENAME)或经过身份验证的请求用户。
要授予对文件的ASP.NET访问权限,请在资源管理器中右键单击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”以添加适当的用户或组。突出显示ASP.NET帐户,并选中所需访问的框。
来源错误:
Line 72: string path = "IIS://" + machine + "/W3SVC/AppPools/" + appPoolName;
Line 73: DirectoryEntry w3svc = new DirectoryEntry(path);
Line 74: w3svc.Invoke("Recycle", null);
Line 75: }
Line 76:
源文件:e:\ iProject \ iProgress \ iProgress \ T \ T.aspx.cs行:74
堆栈追踪:
[UnauthorizedAccessException:拒绝访问。(HRESULT异常:0x80070005(E_ACCESSDENIED))]
[TargetInvocationException:调用目标抛出了异常。] System.DirectoryServices.DirectoryEntry.Invoke(String methodName,Object [] args)+238 e:\ iProject \ iProgress \ iProgress \ T \ T.aspx.cs中的WE_T.Recycle(String machine,String appPoolName):74 e:\ iProject \ iProgress \ iProgress \ T \ T.aspx.cs中的WE_T.Page_Load(Object sender,EventArgs e):38 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)+35 System.Web.UI.Control.OnLoad(EventArgs e)+99 System.Web.UI.Control.LoadRecursive()+50 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+627
答案 0 :(得分:1)
您的初始帖子在计算机名称中的“localhost”后面有一个空格。如果删除它会发生什么?
此外,您还需要确保运行此代码的ASP.NET用户进程具有重新启动其他应用程序池的相应权限。您可以使用模拟执行此操作(错误)或按照例外中的说明操作,以允许用户处理对其他应用程序的适当权限。池。
答案 1 :(得分:1)
我通过将AppPool设置为“本地系统”来实现它。但这可能会导致一些安全问题。有没有更好的解决方案?
答案 2 :(得分:0)
异常抛出,因为运行该应用程序的用户没有管理员权限
Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)
如果您想这样做,您需要为用户授予管理员权限,或创建一个独立的应用程序,用于监控应用程序的状态并在需要时进行回收。