如何安装应用程序的OCX组件?

时间:2012-09-12 16:06:22

标签: vb6

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

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

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

2 个答案:

答案 0 :(得分: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类型库缓存。这通常是在运行中构建的,并在需要时重建。

答案 1 :(得分:2)

如果您真的希望在不诉诸VB6自动注册的情况下实现这些OCX(和DLL)的并行部署,最好是使用应用程序清单进行免注册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放在App.exe旁边,或者将其作为资源嵌入到来自Windows SDK的mt.exe,如下所示

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

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