Оснастка 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.