【问题标题】:MMC snap-in cannot locate a 3rd party DLL located in PATH directoryMMC 管理单元找不到位于 PATH 目录中的第 3 方 DLL
【发布时间】:2011-10-04 14:34:23
【问题描述】:

我遇到了 32 位 MMC 管理单元的问题(在 x64 服务器 2008 机器上)。管理单元已成功注册。当我使用 mmc(带有 32 位选项)启动关联的.msc 文件时,管理单元的名称显示在 LHS 上,但 RHS 显示错误页面,指出无法加载页面。

使用 procmon,我认为我发现问题与未能找到产品随附并由管理单元使用的 DLL 有关。它位于目录 c:\\bin 中,该目录在 PATH 环境变量中指定。但是,MMC 似乎只在 c:\windows\sysWOW6432 目录中查找(即 64 位机器上的 c:\windows\system32 的 32 位版本)。如果它还继续搜索 PATH 上指定的其他目录(包括 c:\\bin 目录),我不会介意这一点。

我已经测试了这个假设并将 DLL 放在 syswow6432 目录中,从那里开始一切似乎都正常工作。

我显然不想将所有产品特定的 DLL 放在系统目录中,而是希望将它们保留在产品特定目录中。

谁能解释在 PATH 上定位 DLL 失败的原因和解决方法。

【问题讨论】:

    标签: dll path mmc syswow64


    【解决方案1】:

    注册依赖程序集时,使用RegAsm.exe/codebase 选项。您可以指定程序集的完全限定路径,当从 MMC 管理单元树中选择管理单元时,该程序集将被延迟加载。

    在 64 位 MS 操作系统上,在没有 /codebase 的情况下,32 位管理单元的依赖程序集/DLL 从 SYSWOW64 目录加载,而 64 位管理单元从 @987654325 加载依赖程序集/DLL @ 目录。 PATH 似乎没有考虑到等式,尽管,或者,您可以使用 gacutil.exe 将您的依赖程序集安装到 GAC 副污染 SYSWOW64 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多