2013-02-13 1 views
6

주어진 프로세스에 대해로드 된 모든 DLL 목록을 얻고 싶습니다. 현재 .NET Framework 4.0을 사용하고 있습니다. Process.Modules 속성을 통해 관리되는 모든 dll에 액세스하려고하면 bug이 있다는 것을 알고 있습니다. (관리되지 않는 dll 만 나열합니다). 프로그래밍 방식으로 이러한 DLL을 모두 검색 할 수있는 방법이 필요합니다.프로세스에 대해 모든 DLL 가져 오기

Process[] myProcess = Process.GetProcessesByName("MyProcess"); 
if(myProcess.Count() > 0) 
{ 
     foreach (ProcessModule processModule in myProcess[0].Modules) 
     //get information 
} 

편집 : 관심있는 프로세스가 현재 AppDomain에 없습니다.

+2

체크 아웃 :'AppDomain.GetAssemblies' –

+0

@AppDeveloper 나는 AppDomain을 사용하여 자신이 만든 프로세스가 아닌 다른 프로세스의 어셈블리를 얻고 싶다고 생각한다. – Jehof

+0

답장을 보내 주셔서 감사합니다. 그러나 내 프로세스가 현재 AppDomain에서 실행되고 있지 않다면이 기능이 작동하지 않을 것이라고 생각합니다. – Matthew

답변

6

내가 버그

없음이 있음을 알고, 그 버그가 아니다. CLR v4의 의도적 인 디자인 변경 이었기 때문에 Microsoft는 그 사실을 비밀로 유지하지 않았습니다. 이전 버전의 CLR에서는로드되지 않은 DLL 인 것처럼로드 된 어셈블리를 에뮬레이션하려고했습니다. 그러나 이는 side-by-side in-process CLR 버전 관리 기능을 구현할 때 의미가 없어졌습니다. 사라지고 돌아 오지 않을거야.

이것은 심각한 문제는 아니지만 다른 프로세스에서로드 된 어셈블리 목록을 디버깅 인터페이스에서 잘 지원하는 것입니다. ICorDebugAppDomain :: EnumerateAssemblies()는 티켓입니다. 프로세스와 같이 사용하기 쉽지는 않습니다. 모듈. 그것을 사용하는 방법을 찾으려면 MDbg sample을 사용하십시오.

+0

수정 해 주셔서 감사합니다. MDbg에 관한 다른 질문을 보시겠습니까? [link] (http://stackoverflow.com/questions/14877213/mdbg-debuggers-protocol-is-incompatible-with-the-debuggee). – Matthew

관련 문제