在Windows 10环境下成功安装VB6后,我测试了ADODB与ODBC功能:前者用于打开Access 97格式的mdb文件,后者则连接dbase III类型的数据库文件。VB6原有功能基本可用,经过进一步优化和修补,整体运行稳定。对于维护旧系统而言,这套方案非常实用;但若要开发新项目,建议选择更现代的开发工具——当前编程平台丰富多样,编程范式也更加先进。
接下来分享具体操作步骤,首先从预处理阶段开始:
1. 安装前环境检查
进入VB6安装程序目录进行查看:
发现其中包含若干16位组件,在Win10系统中无法直接运行。解决方案是使用开源工具OTVDM(Open Tool for Virtual DOS Machine)。只需解压后运行install脚本即可完成配置。此后当系统尝试执行这些旧程序时,会先按常规方式启动,出错后自动交由OTVDM以16位模式处理。若仍失败则退出,否则正常运行。整个过程自动化,省去手动干预。
2. 配置安装选项:跳过VSS与ADO RDS相关组件
网络上普遍建议在Win10安装VB6时不要勾选“VSS”和“ADO RDS”选项。
- VSS(Visual SourceSafe):属于版本控制工具,实际很少使用,因此直接取消勾选,无需深入研究。
- ADO RDS模块:依赖DCOM技术。经检查系统DCOM设置,并查找相关配置程序(如DCOM98、DCM98CFG),发现它们均为16位程序。虽然OTVDM可支持其运行,但Win10因兼容性限制仍会阻止加载,即使调整兼容模式也无法通过。
可通过快捷键 WIN+R 打开运行窗口,输入 dcomcnfg 来查看默认属性及COM安全配置。
既然无法正常运行,也不能让其阻碍安装流程。于是采用替代策略:编写一个空的占位程序,将原有问题程序重命名备份,再用该空程序代替其名称,确保安装器能顺利调用而不报错。
3. 修改安装配置并执行安装
完成预处理后,进入安装配置环节。运行 ACOST.exe 工具进行设置:
在配置界面中取消勾选 VSS、ADO 和 RDS 等不必要项,保存修改。对两个主要配置文件做相同处理以保证一致性。
随后运行 setup.exe 开始安装。由于配置文件已预先设定,后续安装过程将自动按配置执行,无需重复选择,一路点击“确定”即可完成。
4. 单独添加ADO支持功能
考虑到DCOM远程服务主要影响RDS功能,而ADO本身基于本地OLE DB支持,理论上只要系统具备相应组件即可运行。因此再次调整配置文件,重新勾选 ADO、RDS 及 OLE DB Provider 选项,再次运行 setup.exe。
安装程序检测到已有VB6环境,提示可进行修改或卸载。选择“修改安装”,保留原有组件不变。虽然安装过程中未出现错误退出,但在后期更新阶段耗时较长,手动中断了进程。
启动VB6后发现ADO相关控件并未注册成功。于是手动从安装盘的 Shared 目录下提取所需控件文件,复制到系统目录 syswow64 中,并使用 regsvr32 进行注册。
需重点注册的包括:
上述文件可在以下路径中查找获取:
5. 解决代码编辑器鼠标滚轮失效问题
在Win10系统中,VB6代码窗口常出现鼠标中键滚轮无法滚动的问题。网上有方案通过外接管理器注入DLL插件解决,但我更倾向于驱动级方案。将提供的修复程序(exe)放入开机启动项,系统启动后自动运行,即可激活VB6代码窗口中的鼠标滚轮功能。
6. 改善高分辨率下的显示模糊问题
在1920x1080分辨率、缩放比例设为125%的显示器上,VB6界面字体模糊、外观不佳,这是多数老软件共有的兼容性问题。解决方法是强制程序使用 comctl32.dll 的6.0版本。
具体步骤如下:
- 提前准备好所需的清单(manifest)脚本内容。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity
version="1.0.0.1"
processorArchitecture="*"
name="MyAppName.exe"
type="win32"
/>
<description>Optional MyDescription for MyAppName.exe</description>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
<!-- Compatibility section for Program Compatibility Assistant (PCA) -->
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<!-- Trustinfo section for User Account Control (UAC) -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<!-- level = "asInvoker" -->
<!-- level = "highestAvailable" -->
<!-- level = "requireAdministrator" -->
<requestedExecutionLevel
level = "asInvoker"
uiAccess = "false"
/>
</requestedPrivileges>
</security>
</trustInfo>
<!-- Dependency section -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
- 使用 ResHacker 工具,点击 Action → Add a new resource → Open file with new resource,任意打开一个文本文件作为占位资源。
- 在类型栏输入 24,名称输入 1,点击 Add Resource 添加自定义资源。
- 此时 NewHints.txt 袄容被加载,全选内容(Ctrl+A),替换为准备好的脚本代码。
- 点击 Compile Script 编译脚本,然后通过菜单 File → Save 保存修改。工具会生成新文件并自动备份原始exe。
注:ResHacker 支持脚本化操作,可将图标更换、资源嵌入等任务写成脚本实现批量处理。
7. 实现标准DLL项目的构建支持
VB6原生编译流程为:源码经 C2.exe 编译生成 .obj 文件,随后由 link.exe 连接生成目标文件,并删除中间obj文件,全过程高度集成。
传统做法是制作一个带窗体的假 link.exe,在弹出时手动拷贝 obj 文件,确认后再交由真正的 link2.exe(即原 link.exe 重命名而来)完成链接。
我的改进方案是:截取编译EXE和DLL时C2.exe传递的命令行参数,编写一个中间转换程序,精确控制编译与链接流程,从而实现标准DLL项目的完整构建能力。

之前在网上看到一位网友分享了一款集成了标准DLL模板的实用工具,我亲自测试了一下,整体运行效果不错。虽然偶尔会出现小错误,但只需保存当前工作并退出,随后重新启动VB6即可恢复正常。
既然已有现成且稳定的解决方案,就没有必要重复开发。在此,我对这位提供免费工具的同学表示由衷的感谢,感谢他的无私分享。
经过配置和调整后,VB6现已能够稳定运行,功能完善,可满足日常开发需求。
