【发布时间】:2012-03-24 23:08:27
【问题描述】:
我正在开发一个依赖老化 OCX 控件的 .NET 应用程序。该控件提供了一个终端界面,允许用户与航空公司预订系统进行交互。它已经在几个 VB6 应用程序中“成功”使用,但未来我们需要/希望在 .NET 应用程序中使用它。
因此,在使用 .NET 4 和 Visual Studio 2010 的 Windows XP (x86) 机器上,我创建了使用已正确注册的控件的 Winforms 和 WPF 应用程序。我已经实现了 Reg Free COM 并同时使用了 XCOPY 和 Click-Once,这两个项目都可以成功部署到 Windows XP (x86) 机器上,并且都可以按预期工作,而无需注册控件。不幸的是,在 Vista (x86) 和 Windows 7 (x64) 上的部署情况并非如此,在这些环境中应用程序启动但没有呈现控制。
为了了解问题,我尝试在我的 Windows 7 (x64) 开发环境中注册该控件。我都试过了:
- 使用普通 regsvr32(x64 注册表)注册控件
- 使用 sysWOW64 版本的 regsvr32(x86 注册表)注册放置在 SysWOW64 目录中的控件
在这两种情况下,控件似乎都已成功注册,并且在一个全新的 Winforms 项目中,我可以将控件添加到工具箱中(出现图标等)。但是,一旦我将控件拖到窗体,它就会在窗体的角落显示为一个小框(而不是在 XP 上看到的终端窗口),甚至 Interop 文件的生成方式与 XP 相同?!
XP中的控件
选中时在 Windows 7 中看到的控件
我花了很长时间在网上搜寻任何类型的解决方案或类似问题,但无济于事。欢迎提出任何建议!
更新 1:
正如@DanielHilgarth 所建议的那样,我使用该控件在 VB6 中创建了一个基本应用程序并在 Windows 7 (x64) 上运行它,令人讨厌的是,即使是 .NET 应用程序或项目,它也会获取已注册的 COM 组件并按预期工作可以并排运行,看不到任何控件!?
更新 2
如果我使用该控件在我的 XP 机器上创建一个基本的 Winforms 应用程序(但需要注册该控件,即不是免费的)。当它在我的 Windows 7 (x64) 机器上运行时,如果没有注册控件将无法启动(如预期的那样)。控件是否在 x86/x64 注册表中注册对应用来说似乎无关紧要,无论以哪种方式启动,但看不到控件!?
更新 3
我注意到,如果我在我的 Windows 7 环境中运行 Winforms 项目(在 XP 和 COM reg 中创建),除非控件再次注册(如预期)似乎不在乎哪个注册表,否则表单设计器将失败该组件已注册。注册后,将看到表单设计器(没有控件),并且在构建时会看到以下警告:
研究这个警告是徒劳的,它似乎表明 Visual Studio 正在寻找错误的注册表路径,但我找不到解决这个问题的方法?
【问题讨论】:
-
Win7机器上的OCX控件能否成功使用VB6应用程序?顺便说一句:您可以将图像上传到 imageshack 或类似的托管服务提供商,并将它们链接到您的问题中。
-
这听起来不像是注册问题,会产生异常。这听起来像是一个 VB6 控件,它不能托管在 .NET 表单上。并非所有方案都受支持,它必须是行为良好的 ActiveX 控件。不能无窗口,不能创建自己的顶级窗口,等等。与该控件的所有者合作以继续前进。
-
@DanielHilgarth,这是一个非常好的问题。我以前没有走这条路,因为以前的开发人员的 VB6 应用程序很差,需要他“自定义”安装它们!但我会试一试!
-
@HansPassant:如果是这样的话,它根本行不通。但它确实适用于 XP,因此它可以托管在 .NET 表单上。
-
@HansPassant - 这听起来是一个可行的建议,但如果是这种情况,该控件肯定不会在任何 .NET 项目中工作;而不仅仅是 XP 之后操作系统上的 .NET 项目?
标签: .net visual-studio-2010 com 64-bit ocx