我有一个VB6服务,它使用标准的NTSVC.ocx文件来帮助管理所有NT服务功能。该应用程序一直在Windows 2003 Server RC1上运行,没有任何问题。我们的销售团队询问我们是否可以将相同的应用程序放在可用作实时站点演示的笔记本上。我唯一的问题是笔记本电脑是全新的,运行Windows 7,而制造商只有Windows 7驱动程序。
此服务没有安装程序。我手动加载ocx并支持其他dll进入各种Windows和System32文件夹,然后从命令提示符运行regsvr32以加载OCX。该服务有一组命令行来安装和卸载服务本身。
当我尝试REGSVR32 OCX时,我收到以下错误:
模块“C:\ Windows \ System32 \ ntsvc.ocx”无法加载。确保二进制文件存储在指定的路径或调试,以检查二进制文件或从属.DLL文件的问题。找不到指定的模块。
答案 0 :(得分:0)
我会先尝试Dependency walker。如果这不能给你一个关于你需要什么的线索,你可能是SOL。此外,您还必须以管理员身份运行regsvr32,以便获得小UAC弹出窗口。
答案 1 :(得分:0)
这个ocx(也是其他ocx,如vbwheelscollfix.dll)注册非常容易。 第一步: 将此OCX复制到文件夹C:\ Windows \ SYSWOW64(在32位上,我怀疑它的SYSWOW32)。
第二步: 打开具有管理权限的CMD。
最后一步: 现在,您可以从SYSWOW路径注册/取消注册该文件。
答案 2 :(得分:0)
可能导致您出现问题的一个可能原因是,NTSVC.OCX是使用固定的基址构建的(换句话说,图像已被链接器绑定到/FIXED switch)。从Vista开始,Windows Loader使用Address Space Layour Randomization (ASLR) mechanism。
基于此ASLR功能,Windows Loader尝试将OCX组件加载到另一个基本地址而不是预定义的基本地址(在OCX映像文件中硬编码的基本地址)。由于您的OCX地址库是硬编码的,因此Loader将无法加载您的OCX(技术上只是一个DLL!)。
请参阅下面的快照,使用PeStudio显示NTSVC.OCX图像的这些字段:
答案 3 :(得分:0)
正如ich所说: 在管理shell中: regsvr32 C:\ Windows \ SYSWOW64 \ NTSVC.ocx确实对我有用。请注意\ System32不起作用,因为它给了我一个错误。但它可能在x86环境中工作。
我的项目现在没有错误,但是如果它正常工作则没有尝试。