이 질문은 꽤 자주 묻습니다. 그러나 나는 문제가있다. 그래서 저는 별도의 클래스를 만들었습니다. 특히 적절한 사용자 수준이 존재하는지 확인합니다. 다음은 Protected 생성자 파생 클래스 문제
그 권한 수준 테스트하는 코드입니다 : 그래서 그 부분이 의도 한대로 작동class Elevated_Rights
{
// Token Bool:
private bool _level = false;
#region Constructor:
protected Elevated_Rights()
{
// Invoke Method On Creation:
Elevate();
}
#endregion
public void Elevate()
{
// Get Identity:
WindowsIdentity user = WindowsIdentity.GetCurrent();
// Set Principal
WindowsPrincipal role = new WindowsPrincipal(user);
#region Test Operating System for UAC:
if (Environment.OSVersion.Platform != PlatformID.Win32NT || Environment.OSVersion.Version.Major < 6)
{
// False:
_level = false;
// Todo: Exception/ Exception Log
}
#endregion
else
{
#region Test Identity Not Null:
if (user == null)
{
// False:
_level = false;
// Todo: "Exception Log/Exception"
}
#endregion
else
{
#region Ensure Security Role:
if (!(role.IsInRole(WindowsBuiltInRole.Administrator)))
{
// False:
_level = false;
// Todo: "Exception Log/Exception"
}
else
{
// True:
_level = true;
}
#endregion
} // Nested Else 'Close'
} // Initial Else 'Close'
} // End of Class.
}
을; 그러나이 클래스를 다른 클래스에 상속하여 보호 된 생성자를 활용하면 내가 걸린 부분이 있습니다.
class Default_Configuration : Elevated_Rights
{
#region Constructor:
public Default_Configuration() : base()
{
Elevate();
}
#endregion
}
하지만 그 새 클래스를 호출하면; 이 메서드는 "생성자 권한으로 인해 액세스가 유효하지 않습니다"라고 설명합니다. 이론적으로는 작동해야합니다. 내가 놓친 게있어? 어떤 도움이라도 대단히 감사하겠습니다.
"메서드 상태 ...."? 이것은 컴파일러 문제가 아닌 런타임처럼 들립니다 ... 런타임에 인스턴스를 생성하는 Lazy 또는 이와 비슷한 것을 사용하고 있습니까? –
현재 작성된대로'Elevate() '를 두 번 호출하게 될 것입니다. – Bobson
호출 코드를 게시 할 수 있습니까? –