MSDN.WhiteKnight - Stack Overflow answers
Ответ на "как получить список Assembly из нужного процесса"
Answer 789447
Для NET 3.5 и более ранних версий можно получить список сборок через свойство Process.Modules:
Process pr=Process.GetProcessesByName("devenv")[0]; var x = pr.Modules;//получение списка модулей /*Для каждой управляемой DLL в списке будет ее Native Image - файл "*.ni.dll"*/ foreach (ProcessModule y in x) { if (y.ModuleName.EndsWith("ni.dll")) { Console.WriteLine(y.ModuleName.Replace(".ni.dll",".dll")); } }
В NET 4.0 и более поздних версиях механизм загрузки сборок был изменен, так что не для всех грузится Native Image через LoadLibrary и, соответственно, не все они появятся в списке модулей. Для получения полного списка сборок можно использовать библиотеку Microsoft.Diagnostics.Runtime:
public string GetProcessAssemblies(Process pr) { int pid = pr.Id; DataTarget dt; //присоединяемся к процессу using (dt = DataTarget.AttachToProcess(pid, 5000, AttachFlag.Passive)) { StringBuilder sb = new StringBuilder(600); //получаем загруженные версии CLR foreach (ClrInfo clrVersion in dt.ClrVersions) { string s = clrVersion.TryGetDacLocation(); var runtime = dt.CreateRuntime(s); sb.AppendLine("CLR " + clrVersion.ToString()); sb.AppendLine(); //получаем список модулей для данной версии CLR foreach (ClrModule module in runtime.EnumerateModules()) { if (module.IsFile) sb.AppendLine(module.Name); } sb.AppendLine(); } return sb.ToString(); } }
Источник: Steve Horne - Enumerating all Modules in a Managed Process
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.