Как я могу получить список всех неуправляемых библиотек DLL, зарегистрированных в regsvr32?

Я использую regsvr32 для регистрации и отмены регистрации неуправляемой DLL, чтобы использовать ее в моем приложении С#. Но я не видел никаких параметров в инструменте regsvr32, в котором перечислены все зарегистрированные DLL, поэтому как я могу получить список всех зарегистрированных DLL?

Ответ 1

Чтобы просмотреть все зарегистрированные DLL файлы, вы можете использовать следующие бесплатные утилиты:

  • RegDllView - это инструмент для просмотра зарегистрированных файлов dll/ocx/exe в вашей системе и также может регистрировать DLL файлы из Explorer.

  • ListDLLs - еще один инструмент, который сообщает DLL, загруженные в процессы. Вы можете использовать его для отображения всех DLL файлов, загружаемых во все процессы, в определенный процесс или для перечисления процессов, в которых загружена определенная DLL. ListDLLs также может отображать полную информацию о версии для DLL, включая их цифровую подпись, и может использоваться для сканирования процессов для неподписанных DLL.

  • Наконец, вы также можете обратиться к этой статье Dll Profiler в С# на CodeProject.com. DLL-профайлер используется список всех DLL файлов, которые в настоящее время загружены на вашем компьютере, включая их загрузку и их номер версии, размер, дату изменения, название продукта и версию продукта.

Ответ 2

Вы можете использовать Registry для чтения всех зарегистрированных CLSID в Computer\HKEY_CLASSES_ROOT\Wow6432Nodes\CLSID. Не смотрели 32-битную Windows, чтобы увидеть, где находятся CLSIDs.

Ответ 3

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);
                }
            }
        }
    }
}