在应用程序中引用两个版本的mscomctl.ocx会导致问题吗?

时间:2016-02-05 22:57:18

标签: vb6 activex windows-server-2012

我维护了很多旧的VB6代码。这些程序已经存在了很长时间,可以在许多系统上运行而没有任何问题。

最近,我们在Server 2012上遇到了这些程序的奇怪随机问题。

我注意到项目文件引用了mscomctl.ocx#2.0,项目中的表单文件引用了mscomctl.ocx#2.1。

项目文件(vbp) 对象= {831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX

表格档案(frm) 对象= {831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX

进程转储显示comctl32.dll已加载两次

LoadedModule [39] = C:\ Windows \ WinSxS文件\ x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9200.17359_none_bf105a8645f47e85 \ COMCTL32.DLL ... LoadedModule [42] = C:\ Windows \ WinSxS文件\ x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9200.17359_none_8935f06086091acc \ COMCTL32.DLL

从谷歌的角度来看,似乎comctl32.dll是MSCOMCTL.OCX的依赖,它也被加载了。

LoadedModule [47] = C:\ Windows \ System32下\ MSCOMCTL.OCX

这是引起警报的原因吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您的项目(.VBP文件)可能缺少升级ActiveX控件的正确设置。

在文本编辑器中打开该文件并删除任何行:

NoControlUpgrade=1

或者在VB6中打开项目并选中“项目属性”对话框中的框。

答案 1 :(得分:0)

答案是肯定的!

在我浏览了数百个程序并将它们全部设置为MSCOMCTL.OCX版本2.0并重新编译它们之后,问题就停止了(Server 2012缓存了应用程序,所以它需要一段时间但是它停止了。)

仅供参考:设置NoConrolUpgrade = 1似乎没用。 OCX的Kill位强制VB6覆盖设置。

答案 2 :(得分:-1)

首先,是的,您可能已经回答了自己的问题。

MS在“并排”安装方面从未如此出色,甚至他们提出的“并排”实施也已经死了。所以我的猜测是你认为两个版本会导致问题是正确的。但这只是基于经验的猜测。

此外,而不是你的问题的答案,但我跟你在维持旧的vb - 无论一些讽刺的评论vb5 / 6不能在'新窗口'上工作,它仍然如此(只要你不使用微软安装程序。)

和你一样,我现在必须面对现实并处理新的学习曲线。 (升级'旧'东西的负荷)。至少你有服务器2012运行。我只是接受这个混乱的条款。

在深入研究新代码的过程中,我尽可能地放弃语法愚蠢的概念,发现我发现了我喜欢的新东西。有些只是混淆逻辑推理。

由于堆栈不是讨论的论坛,正如我上次被阻止所指出的那样,如果你想比较速度上的注释,你可以通过gjr与我联系!rockley.net

我相信你可以搞清楚。

无论哪种方式,祝你好运。

加里