Господа, подскажите как сделать проверку на наличие DLL файла. Моя прога, использует определенную COM DLL из папки WINNT/System32, если этой DLL нет на компе пользователя, она распаковывает ее из своих ресурсов в System32 и регистрирует ее в реестре. Встал вопрос, как максимально быстро, проверить есть эта библа. Нашел такие методы: 1. Поиск файла функцией SearchPathA 2. Загрузка DLL функцией LoadLibrary, если вернет 0, ее нет на компе. 3. Поиск ProgID DLL в реестре. Какой способ проверки будет максимально быстрым? Может есть еще и другие методы?
Если это действительно СОМ-библиотека, то она не обязана быть в библиотечных путях. Так что единственно верным будет получение пути к библиотеке через реестр: "ProgID":CurVer -> "ProgID.1":CLSID -> CLSID:InProcServer32. Кстати, если библиотеки нет, то она и не будет зарегистрирована в реестре (если корерктно удаляли).
Но если библиотеку стерли вручную, а ссылки в реестре остались, этот метод не даст правильного ответа. Значит надо все равно, проверять наличие DLL на диске, в таком случае, что лучше использовать SearchPathA или LoadLibrary? SearchPathA - кажется будет работать быстрее
jangle 1. Зная ProgID узнай путь к dll 2. есть ли по этому пути dll ? 3. Проверка, вдруг dll имеет схожее название но COM-сервером не является? как отличить обычную Dll от COM`овской ? Очень просто, почти во всех есть АПИ по регистрации\анрегистрации это библы, т.е. DllGetClassObject, etc