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

时间:2012-10-07 07:39:45

标签: c# visual-c++

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

3 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分: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);
                }
            }
        }
    }
}

答案 2 :(得分:1)

您应该能够使用Registry阅读Computer\HKEY_CLASSES_ROOT\Wow6432Nodes\CLSID中的所有已注册CLSID's。没有看过32位Windows以查看CLSIDs的位置。