In Process Explorer I can view all the dlls (and dll details) loaded by a process selected. How can do this programmatically?
I can get a specific process details like this. But unsure where to go from here?
Process[] processlist = Process.GetProcesses();
foreach(Process theprocess in processlist){
Console.WriteLine(“Process: {0} ID: {1}”, theprocess.ProcessName, theprocess.Id);
}
This depends on what you want precisely.
Getting the list of .NET assemblies loaded into a specific app domain is easy (
AppDomain.GetAssemblies
).But listing the App Domains in a process isn't so easy but can be done.
However if you want a list of dll's – native and .NET – as Tony the Lion answers, is just
Process.Modules
.The
Process.Modules
solution is NOT sufficient when running a 64-bit process and trying to collect all modules from a 32-bit process. By default, 64-bit will only work on 64-bit processes, and 32-bit will only work on 32-bit processes.For a solution that works for "AnyCPU", "x86", and "x64", simply call the
CollectModules
function with the target process, see below. Note: Collecting 64-bit modules from a 32-bit process is not possible.There exists the
Process.Modules
property which you can enumerate all Modules (exe and .dll's) loaded by the process.foreach (var module in proc.Modules) { Console.WriteLine(string.Format("Module: {0}", module.FileName)); }
Per the
ProcessModule
class which gives you the properties of a specific module.