나는 현재를 통해 VB 코드에 액세스하는 등록 유형이 : 나는를 실행하려고 할 때,하지만 어떤 이유LINQPad의 반사가 실제로 보안과 다를 수 있습니다.
var progType = Type.GetTypeFromProgID(path);
progInstance = Activator.CreateInstance(progType);
progType.InvokeMember("Show", BindingFlags.InvokeMethod, null, progInstance, new object[] {parameters});
:
Dim prog As Object = CreateObject(sPath)
prog.Show(parameters)
나는대로 C 번호에이를 다시 작성했습니다 메서드 표시, 존재하지 않는 것처럼 보입니다. 나는 그것이 MSDN에서이 행과 관련이있다 생각
var methods = progType.GetMethods().Where(m => m.Name.ToLower() == "show");
:
이 직접 실행 호출자에 대한 완전 신뢰가 필요합니다 LINQPad에서 다음 코드는 아무것도 내 응용 프로그램 결과에 그러나 방법을 보여줍니다. 이 멤버는 부분적으로 신뢰할 수있는 코드 나 투명 코드에서 사용할 수 없습니다.
내 방법에 SecurityCritical
속성을 추가하려고했지만 아무 것도 변경되지 않았습니다. .NET 보안에 익숙하지 않은 사람이 MSDN의 내용을 설명 할 수 있습니까? LINQPad에서 코드를 실행하고 실제 프로그램을 실행하면 다른 결과가 나타나는 이유는 무엇입니까?
Type _progType = Type.GetTypeFromProgID(path);
System.Reflection.MethodInfo _MethodInfo = typeof(_progType).GetMethod("Show");
if (!ReferenceEquals(_MethodInfo, null))
{
// method is founded
}
else
{
// method is not founded
}
주의! :
당신은 _progType.GetMethod ("표시")을 의미? null를 돌려줍니다. – Craig
메서드를 찾을 수 없으면 MethodInfo 개체에서 null이 반환됩니다. – LittleJC