防止VB6项目将控件更新为新控件

防止VB6项目将控件更新为新控件,vb6,activex,ocx,Vb6,Activex,Ocx,在我的VB项目中,我们使用版本为6.1.97.86的MSCOMCTL.OCX,在vbp文件参考中如下 Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; mscomctl.ocx 当在windows 8或具有版本6.1.98.34的MSCOMCTL.OCX的pc中打开此项目时,vbp文件升级为Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}2.1}0;mscomctl.ocx 现在,当这个项目(有2

在我的VB项目中,我们使用版本为6.1.97.86的MSCOMCTL.OCX,在vbp文件参考中如下

Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; mscomctl.ocx
当在windows 8或具有版本6.1.98.34的MSCOMCTL.OCX的pc中打开此项目时,vbp文件升级为
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}2.1}0;mscomctl.ocx

现在,当这个项目(有2.1版)在pc中打开时,出现了旧的OCX文件错误,因为MSCOMCTL.OCX无法加载

解决方案是编辑vbp文件,将2.1更改为2.0并打开项目。这将解决问题。但我想禁用这些ocx文件的升级。在如此多的论坛中,这是一个问题,并将
NoControlUpgrade=1
添加到vbp文件中,如前所述

我尝试了同样的方法,但没有成功。即使在添加了NoControlUpgrade=1(还验证了未选中更新的ActiveX控件)之后,当在pc中打开新的ocx版本并且vbp文件更改为
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}2.1#0;mscomctl.ocx

那么为什么这个解决方案不起作用呢?是否有其他自动升级解决方案?请帮我做这个

编辑:

下面是有问题的完整vbp文件

Type=Exe
Form=Form1.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINDOWS\system32\STDOLE2.TLB#OLE Automation
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; mscomctl.ocx
IconForm="Form1"
Startup="Form1"
HelpFile=""
NoControlUpgrade=1
Command32=""
Name="Project1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1

[MS Transaction Server]
AutoRefresh=1

我在我们的环境中也看到了同样的问题。我们的(创可贴)解决方案是确保我们不会分发包含2.1参考的VBP。当然,我们将VBP文件保存在源代码管理中,并始终使用签入步骤作为比较和捕获此问题的机会

(一般来说,我们从不盲目接受VB6本身对VBP所做的任何更改。通常,我只会小心地将有效更改区分并合并到源代码管理中)


或者,您可以尝试将2.1版本的计算机上的MSCOMCTL.ocx降级为2.0版本。这可能会首先阻止VBP修改的发生。

它会忽略您,因为如果您尝试使用2.0,它会告诉您的程序将不会运行。这与Internet Explorer版本10或Office 2013的安全更新有关。你必须摆脱它才能恢复你的机器,这样2.0才能再次工作。在虚拟机中运行VB6注定迟早会发生,你可能会想得更早。尽管他让它听起来很落后。