使用system.diagnostics.process对参考组件进行反思



我有一个可执行文件,例如,abc.exe,它引用了a.dll(与可执行文件相同的文件夹),b.dll(随机文件夹)和c.dll(在随机文件夹中)。

但是,这些dll不一定与可执行文件(或在GAC中)处于相同的目录,这是我无能为力的事情。

我尝试使用System.Reflection.sembly尝试查找ABC.EXE使用的所有参考组件。

foreach (AssemblyName an in assembly.GetReferencedAssemblies())
{
    Assembly.Load(an);
}

这似乎加载了可执行文件目录(a.dll)中的汇编,但毫不奇怪地抛出其他文件。

我的想法是使用system.diagnostics.process加载该过程,然后反思过程,因为这应该告诉我在哪里可以找到b.dll和c.dll(?)

但是,我不知道该怎么做。这是可能的,如果是这样,怎么能完成?谢谢!

因此,事实证明这可以使用system.diagnostic.process,例如:

public void findModules(string executablePath)
    {
         Process process = new Process();
         process.StartInfo.FileName = executablePath;
         process.Start();
         process.WaitForInputIdle();
         System.Threading.Thread.Sleep(10000);
         ProcessModuleCollection mods = process.Modules;
         foreach (ProcessModule m in mods)
         {
            Console.WriteLine(m.ModuleName + ":" + m.FileName);
         }
  }

Modulename为您提供了汇编和文件名的名称,无论它在何处(在网络上,在C: Windows等)中,都可以为您提供正确的汇编路径。

但是,当可执行文件完成所有模块时,我无法弄清楚如何"检测"。如果我删除睡眠线,我只会看到一个部分模块列表,我猜这是按时间过程加载的模块。模块称为。

最新更新