【问题标题】:Get DLL names from running process, possible?从正在运行的进程中获取 DLL 名称,可能吗?
【发布时间】:2018-06-07 22:49:53
【问题描述】:

我正在寻找一种从正在运行的进程中获取 DLL 名称的方法,但如果我表达得不好,请见谅。

我需要通过它的名称或 PID “连接”到这个进程,并在可能的情况下检索它正在使用的 DLL 名称。

问候。

【问题讨论】:

  • 是的,这是可能的...请显示一些源代码...您尝试了什么?到底是什么不工作?
  • 当然可以使用 PInvoke,win32 API 是 EnumProcessModules(Ex)。不知道没有 PInvoke 或第三方包装器的库存 .NET 是否可行。

标签: c# dll process


【解决方案1】:

是的,这是可能的。您可以使用Process 类。它有一个Modules 属性,列出了所有加载的模块。

例如,将所有进程和所有模块列出到控制台:

Process[] processes = Process.GetProcesses();

foreach(Process process in processes) {
    Console.WriteLine("PID:  " + process.Id);
    Console.WriteLine("Name: " + process.ProcessName);
    Console.WriteLine("Modules: ");

    foreach(ProcessModule module in process.Modules) {
        Console.WriteLine(module.FileName);
    }
}

您当然可以查看Process.Id 获取您想要的 PID 等。

有关更多信息,请查看此类的文档:-

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

注意:此代码可能会对您无权访问的某些系统进程造成干扰。

【讨论】:

  • 如果执行它的进程是 32 位和 64 位模块正在被访问,该代码也会变得不正常。 "A 32 bit processes cannot access modules of a 64 bit process.
  • @Sam Yeh。我猜你可以写一些你可以转储和执行的存根,它返回你的列表,虽然有点骇人听闻:/
  • 第二个 foreach 循环对我有用!如此简单,但它仍然让我无法理解。感谢分享,劳埃德!你帮我省了很多麻烦:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多