问题 如何获取regsvr32工具注册的所有非托管dll的列表?


我使用regsvr32来注册和取消注册非托管DLL,以便在我的C#应用​​程序中使用它。但是我没有在regsvr32工具中看到任何列出所有已注册DLL的参数,那么如何获得所有已注册DLL的列表呢?


8135
2017-10-07 07:39


起源



答案:


要查看所有已注册的DLL,您可以使用以下免费实用程序:

  1. RegDllView 是一个工具,用于查看系统上已注册的dll / ocx / exe文件,还可以从资源管理器中注册dll文件。

  2. 的ListDLLs 是另一个报告加载到进程中的DLL的工具。您可以使用它列出加载​​到所有进程中的所有DLL,特定进程,或列出加载了特定DLL的进程。 ListDLL还可以显示DLL的完整版本信息,包括其数字签名,并可用于扫描未签名DLL的​​进程。

  3. 最后,您也可以参考这个 C#中的Dll Profiler CodeProject.com上的文章。 DLL探查器 用于列出当前在您的计算机中加载的所有DLL,包括它们的加载位置及其版本号,大小,修改日期,产品名称和产品版本。


10
2017-10-07 07:54



如果RegDllView在启动时看起来像是“挂起”,请注意不要惊慌,因为当您拖动窗口时窗口内容不会更新。这是工作!它偶尔会发现一些DLL,所以给它几分钟。 - Colin


答案:


要查看所有已注册的DLL,您可以使用以下免费实用程序:

  1. RegDllView 是一个工具,用于查看系统上已注册的dll / ocx / exe文件,还可以从资源管理器中注册dll文件。

  2. 的ListDLLs 是另一个报告加载到进程中的DLL的工具。您可以使用它列出加载​​到所有进程中的所有DLL,特定进程,或列出加载了特定DLL的进程。 ListDLL还可以显示DLL的完整版本信息,包括其数字签名,并可用于扫描未签名DLL的​​进程。

  3. 最后,您也可以参考这个 C#中的Dll Profiler CodeProject.com上的文章。 DLL探查器 用于列出当前在您的计算机中加载的所有DLL,包括它们的加载位置及其版本号,大小,修改日期,产品名称和产品版本。


10
2017-10-07 07:54



如果RegDllView在启动时看起来像是“挂起”,请注意不要惊慌,因为当您拖动窗口时窗口内容不会更新。这是工作!它偶尔会发现一些DLL,所以给它几分钟。 - Colin


static void Main(string[] args)
{
    var parent = Registry.ClassesRoot.OpenSubKey("CLSID");
    var subKeys = parent.GetSubKeyNames();
    foreach (var subKey in subKeys)
    {
        var sub = parent.OpenSubKey(subKey);
        if (sub != null)
        {
            var inProc = sub.OpenSubKey("InProcServer32");
            if (inProc != null)
            {
                var val = inProc.GetValue(null);
                if (val != null)
                {
                    var name = val.ToString();
                    if (!string.IsNullOrWhiteSpace(name))
                        Console.WriteLine(name);
                }
            }
        }
    }
}

2
2017-09-04 21:29



仅供参考,查看InProcServer32值通常(总是?)获取dll的8.3文件名,因此您可能还需要捕获ProgID子键(如果可用)和/或查找长文件名。 - Tydaeus


你应该可以使用 注册处 阅读所有已注册的 CLSID的 在里面 Computer\HKEY_CLASSES_ROOT\Wow6432Nodes\CLSID。没有看过32位Windows,看看在哪里 CLSIDs 是。


1
2017-10-07 08:04



你怎么用这个方法?虽然我已经注册了一些DLL regsvr32 命令,在您提到的路径下,只有一个默认项。那么如何使用您的方法查看已注册的DLL? - Gil Epshtain