16

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

4

3 回答 3

16

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

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

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

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

于 2012-10-07T07:54:46.297 回答
3

您应该能够使用注册表读取. Computer\HKEY_CLASSES_ROOT\Wow6432Nodes\CLSID还没有查看 32 位 Windows 以了解它们在哪里CLSIDs

于 2012-10-07T08:04:37.113 回答
2
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);
                }
            }
        }
    }
}
于 2015-09-04T21:29:54.400 回答