1

我在 App 服务器上复制了一些组件,以便可以运行 VB6 应用程序

TABCTL32.OCX
TABCTL32.DEP
MSWINSCK.DEP
MSWINSCK.OCX
MSMAPI32.DEP
MSMAPI32.OCX
FTP.OCA
FTP.OCX
COMDLG32.OCX

我从这里另一个问题的答案中得到了一些建议。任何人都可以建议这样做是否安全。此服务器上还安装了一个 ASP.NET 应用程序(框架版本 3.5)。

4

2 回答 2

4

以“.OCX”扩展名结尾的文件实际上是 32 位进程内 COM DLL,必须注册才能使用它们。这是通过命令行“regsvr32”实用程序完成的。

将这些文件复制到应用程序的主机目录将不足以让依赖于 .OCX 文件中提供的组件的应用程序访问它们。这是因为应用程序将通过其注册的编程 ID(“ProgID”)创建 COM 对象的实例,Windows 将依次转换为 CLSID 和提供对象实现的 COM 进程内服务器 DLL。如果 OCX 未注册,则没有 COM 信息允许 Windows 执行所需的映射。

ProgID、ClsID 和相关类型库信息通过 RegSvr32 实用程序“发布”到 Windows,该实用程序实际上只是加载目标 DLL/OCX 并专门调用 COM DLL 入口点“DllRegisterServer”,它允许 DLL 发布其 COM注册信息。如果不这样做,则没有可用的 COM 注册,并且对 OCX/DLL 中承载的对象的调用将失败。

缺少重要的 COM 注册信息是将 OCX 文件复制到主机文件夹的原因不足以使消费应用程序利用其中托管的 COM 对象。

文件扩展名的附加信息

  • .OCX - 实际上,它只是一个具有不同扩展名的 COM DLL。这些名称是作为旧的“* O *LE * C *ontrol E* x *tension”绰号下的 VB 扩展的容器给出的,因此是 OCX。
  • .DEP - Windows 依赖文件。这些文件往往具有 Visual Basic“安装应用程序”的传统,通常包含有关给定 EXE 或 DLL 对其他 DLL 的依赖关系的信息。例如,A.EXE 可能依赖于 B.DLL,但 B.DLL 也可能依赖于 C.DLL。
  • .OCA - OCX 类型库缓存。这通常是动态构建的,并在需要时重建。
于 2012-09-12T17:33:10.090 回答
2

如果您真的想实现这些 OCX(和 DLL)的并行部署而不诉诸 VB6 自动注册黑客,最好是使用免注册 COM 的应用程序清单。

我们使用UMMM在构建时自动创建这些,在您的情况下,清单创建将是一次性的工作。

这是在您的情况下使用 UMMM 的方法。首先创建一个App.ini像这样的文件

Identity App.exe YourCompany.App "Application 1.0"
File TABCTL32.OCX
File MSWINSCK.OCX
File MSMAPI32.OCX
File FTP.OCX
File COMDLG32.OCX
# more OCXs/DLLs here...

UMMM.exe像这样“编译”清单

c:>UMMM.exe App.ini App.exe.manifest

要么放在App.exe.manifest你旁边,要么像这样使用 Windows SDKApp.exe将其作为资源嵌入mt.exe

c:>mt.exe -nologo -manifest App.exe.manifest -outputresource:App.exe;1

取消注册 OCX/DLL(这很重要)并测试您的应用程序。

于 2012-09-13T08:39:02.513 回答