【问题标题】:NTSVC.OCX issues on Windows 7Windows 7 上的 NTSVC.OCX 问题
【发布时间】:2010-02-11 00:09:43
【问题描述】:

我有一个使用标准 NTSVC.ocx 文件来帮助管理所有 NT 服务功能的 VB6 服务。该应用程序已在 Windows 2003 Server RC1 上运行,没有出现任何问题。我们的销售团队询问我们是否可以将相同的应用程序放在可以用作现场演示的笔记本上。我遇到的唯一问题是笔记本是全新的,运行 Windows 7,而制造商只有 Windows 7 设备驱动程序。

此服务没有安装程序。我手动将 ocx 和支持其他 dll 加载到各种 Windows 和 System32 文件夹中,然后从命令提示符运行 regsvr32 以加载 OCX。该服务有一组命令行参数来安装和卸载服务本身。

当我尝试 REGSVR32 OCX 时,我收到以下错误:

模块“C:\Windows\System32\ntsvc.ocx”加载失败。确保二进制文件存储在指定路径或调试以检查二进制文件或相关 .DLL 文件是否存在问题。找不到指定的模块。

【问题讨论】:

    标签: windows windows-7


    【解决方案1】:

    可能导致您的问题的一个潜在原因是 NTSVC.OCX 是使用固定的基地址构建的(换句话说,图像已由链接器绑定到 /FIXED switch)。从 Vista 开始,Windows 加载程序使用Address Space Layour Randomization (ASLR) mechanism

    基于此 ASLR 功能,Windows 加载程序会尝试将 OCX 组件加载到另一个基地址,而不是预定义的基地址(OCX 映像文件中硬编码的基地址)。由于您的 OCX 地址库是硬编码的,因此加载程序将无法加载您的 OCX(从技术上讲,这只是一个 DLL!)。

    请参阅下面的快照,显示使用PeStudio 的 NTSVC.OCX 图像的这些字段:

    【讨论】:

      【解决方案2】:

      我会先尝试Dependency walker。如果这不能让您知道您需要什么,那么您可能是 SOL。此外,您必须以管理员身份运行 regsvr32,因此您应该会看到小 UAC 弹出窗口。

      【讨论】:

        【解决方案3】:

        这个 ocx(还有其他 ocx,例如 vbwheelscollfix.dll)注册起来非常容易。 第一步: 将此 OCX 复制到文件夹 C:\Windows\SYSWOW64(在 32 位上,我怀疑它的 SYSWOW32)。

        第二步: 打开具有管理权限的 CMD。

        最后一步: 现在您可以从 SYSWOW 路径注册/取消注册文件了。

        【讨论】:

          【解决方案4】:

          正如我所说: 在管理外壳中: regsvr32 C:\Windows\SYSWOW64\NTSVC.ocx 确实为我工作。请注意 \System32 不起作用,因为它给了我一个错误。不过,它可能在 x86 环境中工作。

          我现在的项目中没有错误,但没有尝试它是否正常工作。

          【讨论】:

            猜你喜欢
            • 2010-11-29
            • 1970-01-01
            • 2012-01-04
            • 2013-05-26
            • 2015-03-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多