繁体   English   中英

Pool.Recycle() 从 HRESULT 抛出异常:0x80070005 (E_ACCESSDENIED)

[英]Pool.Recycle() throwing exception from HRESULT: 0x80070005 (E_ACCESSDENIED)

我想在一段时间后以编程方式回收应用程序池。 我使用下面指定的 2 种方法进行了尝试。

1)
    public static void RecycleAppPools()
    {
        ServerManager serverManager = new ServerManager();
        ApplicationPoolCollection appPools = serverManager.ApplicationPools;
        foreach (ApplicationPool ap in appPools)
        {
            //if(ap.Name== System.Security.Principal.WindowsIdentity.GetCurrent().Name)
            ap.Recycle();
        }
    }

以上是抛出“拒绝访问”的异常

  2) private static void RecycleApplicationPool(string appPoolId)
    {
        string appPoolPath = "IIS://localhost/W3SVC/AppPools/" + appPoolId;

        var appPool = new DirectoryEntry(appPoolPath);

      //  DirectoryEntry appPoolEntry = new DirectoryEntry(appPoolPath);

        appPool.Invoke("Recycle", null);
    }

上述方法抛出异常“ System.Runtime.InteropServices.COMException: Unknown error (0x80005000) ”。 没有什么对我有用。

我已经参考了 Microsoft.Web.Administration 并使用框架 4.6.1 和 IIS 版本为 10.0.14393.0 在 Visual Studio 2015 express上工作

如果有人可以,请帮助。 提前致谢。

您在池中运行的应用没有权限回收该应用池。 该错误非常明显。 该权限被授予Administrator组的成员。

解决方案是不要从应用程序池中回收应用程序池。 按需回收应用程序池的整个想法是疯狂的。 您应该使用应用程序池<recycle>设置来触发此操作 如果您坚持使用以Admin身份运行的计划任务

不要将应用更改为以管理员身份运行。

编辑:代表解决方案@Zaitsman显示也很好

正如@RemusRusanu指出的那样,通常这不是一个好主意(认为在您的应用程序池中运行代码的攻击者可以在您的设备中执行全新的DDoS级别)。

但是,如果委派按照本文的权限运行应用程序池的用户, 可以执行此操作: https : //blogs.msdn.microsoft.com/asiatech/2011/07/20/iis-7-delegate非管理员的远程应用程序池回收/

不确定这是否会对任何人有帮助,但是我花了几天的时间才找到解决方案。
对我来说,有人关闭了Windows进程激活服务(WAS),一旦我启动了该服务,它就消除了我遇到的“拒绝访问”错误。

希望它可以帮助某人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM