Невозможно зарегистрировать / загрузить DLL вне содержащей папки

389
Luke

У меня есть приложение (x64), которое использует стороннюю среду выполнения, и приложение испытывает проблемы с загрузкой этой среды выполнения через свои библиотеки DLL (также x64).

Установщик Windows пытается зарегистрировать эти библиотеки DLL (предположительно по той же причине), и поэтому я протестировал регистрацию библиотек DLL с помощью regsvr32 и обнаружил интересное поведение. Я могу заставить библиотеки DLL успешно регистрироваться и отменять регистрацию с помощью regsvr32 (я могу найти их в реестре в разделе CLSIDs впоследствии), но только если я выполняю regsvr32 из папки, в которой хранятся библиотеки DLL. Даже если я использую относительные пути (например, ... \ outer \ dlls \ binary.dll) из папки, в которой они хранятся, они все еще успешно регистрируются. Я пробовал как с полным, так и с частичным путями, примерно от 4 до 1 уровня выше в пути, и все не удалось.

Ошибка, с которой он всегда возвращается, - «Неверный доступ к ячейке памяти». Что достаточно расплывчато, чтобы было очень трудно найти источник.

У кого-нибудь есть опыт решения этой проблемы? Кто-нибудь знает, что может быть причиной? Странно, что это работает изнутри папки, а не из других мест. Я могу только предположить, что существует какая-то экологическая проблема или коррупция, поскольку у меня есть другие машины, где вообще нет проблем. Я запустил инструмент для восстановления .NET, но, похоже, ничего не изменилось.

0
Я сбит с толку. Вы упомянули, что запускали .NET Repair Tool, но вам не следует использовать regsvr32 для регистрации библиотеки .NET, regsvr32 обычно ограничивается библиотекой Windows COM. Пожалуйста, уточните причину, по которой вы запускаете .NET Repair Tool. Ramhound 6 лет назад 1
Среда выполнения предназначена для использования приложениями .NET, но я считаю, что это двоичные файлы C ++ Luke 6 лет назад 0
@Ramhound Извините, я не прояснил это. Теперь я понимаю, как странно это звучит. Я просто пробовал все и подумал, может быть, это проблема .NET. Luke 6 лет назад 0
Вы не просто "регистрируете" произвольные библиотеки DLL; как сказал @Ramhound, regsvr32 имеет [* только * значение для собственного COM] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms683954.aspx), который [может выполнять произвольный код] ( https://msdn.microsoft.com/en-us/library/windows/desktop/ms682162.aspx), которые могут вызывать это исключение. [Базовые модули] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175.aspx) (например, экспорт на C) и [сборки .NET] (https://msdn.microsoft.com /en-us/library/system.reflection.assembly.load.aspx) * полностью * отличаются и обычно не включают regsvr32. Bob 6 лет назад 0
Вы должны (а) назвать участвующие библиотеки, если это возможно, (б) назвать приложение-потребитель, если это возможно, и (в) процитировать любые ошибки, которые вы могли получить от установщика, дословно. Дополнительная информация об окружающей среде также будет полезна. В противном случае все будут работать на возможно неправильных предположениях. Bob 6 лет назад 0
@Bob Среда выполнения - среда выполнения SAP Crystal Reports для .NET 4.0. Я понимаю, что это COM DLL. Программа установки не может зарегистрировать их во время установки с ошибкой 1904. Модуль не удалось зарегистрироваться "и HRESULT -2147023898. Luke 6 лет назад 0

0 ответов на вопрос