Оснастка MMC не может найти стороннюю DLL, расположенную в каталоге PATH

У меня проблема с 32-разрядными оснастками MMC (на компьютере с сервером x64 2008). Оснастки были успешно зарегистрированы. Когда я запускаю связанный файл.msc с помощью mmc (с 32-битной опцией), имена (имена) оснасток отображаются на LHS, но RHS показывает страницу с ошибкой, которая говорит, что страница не может быть загружена.

Используя procmon, я думаю, что я обнаружил, что проблема связана с невозможностью найти DLL, которая также поставляется с продуктом и используется оснасткой. Он находится в каталоге c:\\bin, и этот каталог указан в переменной среды PATH. Однако MMC, похоже, ищет только в каталоге c:\windows\sysWOW6432 (то есть 32-битной версии c:\windows\system32 на 64-битной машине). Я не возражаю против этого, если он также продолжит поиск других каталогов, указанных в переменной PATH (которая включает в себя каталог c:\\bin).

Я проверил эту гипотезу и поместил библиотеки DLL в каталог syswow6432, и с этого момента все работает правильно.

Я бы, очевидно, не хотел бы помещать все специфичные для продукта DLL в системный каталог и предпочел бы хранить их в специфичном для продукта каталоге.

Может кто-нибудь объяснить сбой, чтобы найти DLL на PATH и резолюции.

1 ответ

Использовать /codebase вариант RegAsm.exe при регистрации ваших зависимых сборок. Вы можете указать полный путь к вашей сборке, который будет загружаться с отложенной загрузкой при выборе оснастки в дереве оснастки MMC.

В 64-битных операционных системах MS, при отсутствии /codebaseзависимые сборки /DLL 32-битных оснасток загружаются из SYSWOW64 в то время как 64-битные оснастки загружают зависимые сборки /DLL из system32 каталог. PATH не похоже на фигуру в уравнении, хотя, в качестве альтернативы, вы могли бы использовать gacutil.exe установить ваши зависимые сборки в GAC, который загрязняет SYSWOW64.

Другие вопросы по тегам