2017-12-27 45 views
-1

시간 간격을두고 프로그래밍 방식으로 응용 프로그램 풀을 재활용하려고합니다. 나는 아래에 지정된 두 가지 방법을 사용하여 그것을 시도했다. HRESULT에서 예외를 throw하는 Pool.Recycle() : 0x80070005 (E_ACCESSDENIED)

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); 
    } 

이 위의 방법은 예외를 던지고있다 "알 수없는 오류 (0x80005000)함께 System.Runtime.InteropServices.COMException" "액세스가 거부되었습니다." 나를 위해 아무 것도 작동하지 않습니다.

는 I 2015 프레임 워크 4.6.1과을 표현하는 비주얼 스튜디오에 Microsoft.Web.Administration을 참조하고 작업 주어진 누구나 할 수 있다면 도와주세요 IIS 버전은 10.0.14393.0

입니다했다. 미리 감사드립니다.

+0

당신이 AppPool을 재활용하고 싶은 시나리오에 게시하시기 바랍니다 수 :이 문서에 따라 권한을 가진 사용자의 응용 프로그램 풀을 실행하는 사용자를 위임 할 경우

그러나 이 작업을 수행 할 수 있습니다? – programtreasures

+0

이것을 확인하셨습니까? https://stackoverflow.com/questions/249927/restarting-recycling-an-application-pool. 관리 모드에서 코드를 실행해야 할 수도 있습니다. –

+0

@SouvikGhosh 예 링크를 시도했지만 여전히 예외가 발생했습니다 "applicationPool.Recycle();" Exception from HRESULT : 0x80070005 (E_ACCESSDENIED) " –

답변

2

풀에서 실행중인 앱은 앱 풀을 재활용 할 수있는 권한이 없습니다. 오류는 매우 명확하고 명확합니다. 관리자 그룹의 구성원에게 사용 권한이 부여됩니다.

해결 방법은 응용 프로그램 풀에서 응용 프로그램 풀을 재활용하지 않는 것입니다. 수요에 따라 앱 풀을 재활용한다는 전체 아이디어는 불만입니다. app pool <recycle> settings to trigger this을 사용해야합니다. 당신이 주장한다면 use a scheduled task that runs as Admin.

Admin으로 실행하도록 앱을 변경하지 마십시오.

편집 : @RemusRusanu이 좋은 생각 (앱 풀 내에서 코드를 실행하는 공격자가 완전히 새로운 수준을 할 수 있다고 생각하지 않습니다 일반적으로 지적 @Zaitsman 보여줍니다 위임 솔루션은

+0

다음 권한을 위임 할 수도 있습니다. https://blogs.msdn.microsoft.com/asiatech/2011/07/20/iis-7-delegate-remote -application-pool-recycling-for-non-administrator/ – zaitsman

+0

@RemusRusanu 엘리먼트를 추가하여 일정 시간 후에 재활용을 예약하는 코드를 시도했습니다. 버튼 클릭시 해당 코드를 수행했습니다. 첫 번째 클릭을 위해 풀을 재활용하지만 그 시간 간격 후에 페이지를 새로 고침하면 풀이 재활용되지 않았다는 의미의 세션이 삭제되지 않습니다. 내가 틀린 곳을 말해줘. –