2011-08-14 3 views
5

네이티브 프로세스 내에서 CLR 런타임을 시작한 다음 일부를 사용하여 .NET DLL에서 다른 클래스를로드합니다. 그 프로세스 내에서 NET 실행 가능. 내 관리 어셈블리/호스트 CLR 런타임 (CLR 런타임 호스트 위치)을 실행 한 프로세스 ID/이름 얻기

지금처럼 나는, 반사를 사용하고 다른 .NET 실행 파일을로드하려면 :

Assembly.Load(file).EntryPoint.Invoke(null, null); 

지금, 나는 런타임을 시작하는 C++ DLL을 주입, 그 다음 어셈블리를 사용하는 .NET DLL을 호출합니다. 다른 .NET 실행 파일을 메모리에로드하고 실행하려면로드하십시오.

DLL이 호출, 내 .NET 실행 파일을로드하면

:

System.Reflection.Assembly.GetExecutingAssembly().Location; 

또는

Process.GetCurrentProcess().MainModule.FileName; 

이것은 물론, 심지어 다른 내부의 실행하지만, 실행 파일 자체의 위치를 ​​반환 호스트 프로세스. 해당 호스트 프로세스의 이름을 얻을 수있는 방법이 있습니까? 프로세스 탐색기는이를 호스트 프로세스 내에서 실행중인 것으로 보여주기 때문에 올바르게 작동하는 부분을 알고 있습니다.

물론이 명령을 먼저로드 된 .NET DLL에서 실행하면 적절한 프로세스 이름이 표시됩니다.

감사합니다.

편집 : 나는뿐만 아니라 GetEntryAssembly()GetCallingAssembly()을 시도

.

답변

4

그렇게하지 마십시오.

.NET Framework를 사용자 자신이 아닌 다른 프로세스에 삽입 할 수 없습니다. 이미 다른 프레임 워크가로드되었거나 나중에 다른 프레임 워크 버전을로드하려고 할 수 있습니다.

GetModuleFileName (GetModuleHandle (NULL));을 호출하여 호스트 프로세스의 이름을 얻을 수 있습니다. 두 API 호출은 모두 P/Invoke [1][2]입니다.

+0

죄송합니다. Lundberg에게 미안하지만, StackOverflow는 접근성 버그를 수정하지 않으므로 편집 해 줄 수는 없습니다. – Joshua

0

내가 정확히 귀하의 질문을 이해한다면 "부모 프로세스"를 찾고 싶습니다. 관리 방법이나 P/Invoke를 통해 여러 가지 방법이 있습니다.이 작업을 수행하는 방법에 대한 좋은 코드 샘플이 있습니다. How to get parent process in .NET in managed way