当前位置:编程学习 > C#/ASP.NET >>

===请问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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,