2016-10-04 3 views
0

Я пытаюсь извлечь clr.dll и mscorwks.dll в приложение из другого программного обеспечения, которое написано на C#. Моя цель - собрать все файлы, необходимые для анализа дампа памяти, даже если анализ будет выполнен на автономном компьютере.C# - Извлечение clr.dll и т. Д. Приложения

Что я пробовал до сих пор;

var currentAssembly = Assembly.LoadFrom(process.MainModule.FileName);//with the given process; 
var assemblyList = currentAssembly.GetReferencedAssemblies().ToList(); 
var manifestList = currentAssembly.GetManifestResourceNames(); 

Хотя GetReferencedAssemblies() не дает мне clr.dll или mscorwks.dll, но только mscorlib.dll и GetManifestResourceNames() дать мне только файл изображения, который используется в программном обеспечении.

У кого-нибудь был такой опыт? Я что-то упустил, чтобы получить библиотеки DLL, которые я хочу?

Благодарим вас за интерес!

С уважением,

Erdi

+0

Ну, не так, это неуправляемые библиотеки DLL. Вам понадобится Process.Modules, чтобы увидеть их, включая все модули ОС. «Автономный компьютер» не является практичным, вам нужны PDB, и для этого требуется использовать сервер символов. –

+0

Ты спасатель жизни! Спасибо! :) – Celebrimbor

+0

Хотя, я не мог найти mscorwks.dll там, в любом другом месте, где я должен искать это? – Celebrimbor

ответ

0

Я думаю, что лучший способ добиться того, что вы хотите сделать, это использовать Microsoft.Diagnostics.Runtime (NuGet-пакет), и это DataTarget класс. Это позволяет прикрепить процесс и прочитать что-либо из процесса.

Для перебора всех загруженных модулей (управляемые и неуправляемые, что есть) вы могли бы сделать:

using (dt = DataTarget.AttachToProcess(proc.Id, 100, AttachFlag.Passive)) 
    { 
     // since 4.0 we can possibly find more than one runtime (side-by-side CLRs) in one AppDomain... 
     if (dt.ClrVersions.Count > 0) 
     { 
      foreach (var clr in dt.ClrVersions) 
      { 
       Console.WriteLine(clr.Version + " " + clr.Flavor.ToString()); 
      } 
     } 
    } 

Где proc является экземпляром System.Diagnostics.Process. Вместо использования ярлыка через ClrVersions вы также можете перечислить все модули (по телефону EnumerateModules)

Смежные вопросы