===请问iis应用程序池回收时权限的问题=====
我的程序池是testpool,程序如下:using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.DirectoryServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Diagnostics;
public partial class huishou : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
//如果应用程序池当前状态为停止,则会发生异常报错
string AppPoolName = "testpool";
string method = "Recycle";
//try
//{
DirectoryEntry appPool = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
DirectoryEntry findPool = appPool.Children.Find(AppPoolName, "IIsApplicationPool");
findPool.Invoke(method, null);
appPool.CommitChanges();
appPool.Close();
Response.Write("应用程序池名称回收成功");
//}
//catch (Exception ex)
//{
// Response.Write("回收失败");
//}
}
}
运行时,出现错误:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------
拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.UnauthorizedAccessException: 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))
ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}\ASPNET,在 IIS 6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。
要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。
源错误:
行 35: DirectoryEntry appPool = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
行 36: DirectoryEntry findPool = appPool.Children.Find(AppPoolName, "IIsApplicationPool");
行 37: findPool.Invoke(method, null);
行 38: appPool.CommitChanges();
行 39: appPool.Close();
堆栈跟踪:
[UnauthorizedAccessException: 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))]
[TargetInvocationException: 调用的目标发生了异常。]
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42
请问如何解决,权限从哪里设置?谢谢! --------------------编程问答-------------------- 资源管理器 -> 工具 -> 文件夹选项 -> 显示 -> 把简单文件共享的选择去掉(默认是打钩的)
选择上传文件夹 -> 右键 -> 安全 -> 把everyone用户的读写权限都加上。 --------------------编程问答-------------------- 具体的文件夹再哪里呢?网站的应该不是,是IIS://localhost/W3SVC/AppPools的路径在哪里呢 --------------------编程问答-------------------- 加every权限不合适吧,太不安全了 --------------------编程问答-------------------- 如何用c#程序来回收呢 --------------------编程问答-------------------- 回收应用程序池需要你当前应用程序池用户身份是本地管理员,或者你做impersonation。都是很麻烦的。
其实一般只需要呼叫AppDomain.Unload来释放当前的AppDomain就好了,就能够使ASP.NET重新加载当前的网站。
毕竟回收程序池会导致运行在同一个池内所有的应用都被回收。除非你们是做网站运营的公司,不然真没这个必要。 --------------------编程问答-------------------- 谢谢楼上,这个网站确实是我们来运营,服务器也是我们的
你告诉我的这个,我试了一下,不行,可能我不太会这种方法。请赐教。 --------------------编程问答-------------------- 如果你的确是运营网站的,那倒反而好做了,
这个运营目的的站点可以运行在自己独立的应用程序池里面,然后把这个池的用户身份换成本机管理员就好了。这样应该就有足够权限来回收程序池。 --------------------编程问答--------------------
补充:.NET技术 , ASP.NET