【发布时间】:2013-09-11 15:08:24
【问题描述】:
我正在用 VB6 编写一个项目。我正在使用 Win7-32 位并且项目有问题,这个项目是多年前写的,现在我正在重新编译它。当我发出 Make xxx.exe 命令时,VB6 开始编译并冻结并创建超过 10,000 个 *.tmp 文件,几分钟后它关闭 IDE 并且没有任何结果。 我的错在哪里?
【问题讨论】:
标签: vb6 makefile exe freeze tmp
我正在用 VB6 编写一个项目。我正在使用 Win7-32 位并且项目有问题,这个项目是多年前写的,现在我正在重新编译它。当我发出 Make xxx.exe 命令时,VB6 开始编译并冻结并创建超过 10,000 个 *.tmp 文件,几分钟后它关闭 IDE 并且没有任何结果。 我的错在哪里?
【问题讨论】:
标签: vb6 makefile exe freeze tmp
解决我在编译大型可执行项目时 VB6 冻结问题的方法是将 VB 应用程序的 CPU 内核限制为只有一个内核(即,将 VB6 进程的关联掩码设置为 1)。
请注意,仅当 VB6 进程以关联掩码设置为 1 时才对我有效,而不仅仅是在 VB 进程启动后强制执行关联掩码(在任务管理器中)。 要在关联掩码设置为 1 的情况下启动 VB6,请使用以下快捷方式(分别适用于 64 位和 32 位操作系统)并以管理权限启动它:
C:\Windows\System32\cmd.exe /C start "VisualBasic6" /D "C:\Program Files (x86)\Microsoft Visual Studio\VB98" /AFFINITY 1 "C:\Program Files (x86)\ Microsoft Visual Studio\VB98\VB6.EXE"
C:\Windows\System32\cmd.exe /C start "VisualBasic6" /D "C:\Program Files\Microsoft Visual Studio\VB98" /AFFINITY 1 "C:\Program Files\Microsoft Visual Studio\VB98\ VB6.EXE"
如果这不起作用,请尝试使用上述方法在 VB6 IDE 之外创建您的项目。例如,假设您需要在路径 C:\MyProjects\TestProj 中构建一个名为 testproj.vbp 的项目,请在提升的命令提示符中使用以下命令(分别适用于 64 位和 32 位操作系统):
启动 "VisualBasic6" /D "C:\Program Files (x86)\Microsoft Visual Studio\VB98" /AFFINITY 1 "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE" /make "C:\MyProjects\TestProj\testproj.vbp" /outdir "C:\MyProjects\TestProj"
开始 "VisualBasic6" /D "C:\Program Files\Microsoft Visual Studio\VB98" /AFFINITY 1 "C:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE" /make "C:\MyProjects\ TestProj\testproj.vbp" /outdir "C:\MyProjects\TestProj"
很遗憾,VB6 并没有提示编译已经完成,所以您需要在任务管理器中跟踪 VB6 进程(当编译完成时,VB6 进程将终止)。
仅供参考,我在具有 2 个 Intel Xeon 四核 CPU 的 Windows Server 2012 上运行 VB。
【讨论】:
我之前(令人惊讶地)遇到过类似的问题。
最好的解决方案是开始更改您的项目设置。
右键单击您的项目并转到“属性”。在“编译”选项卡下,转到高级优化。关闭“假定无别名”可能是您最好的选择。但是,如果该按钮被禁用,请尝试从 P-Code 切换到 Native Code。
如果上述更改不起作用,并且您还没有使用 P-Code,请尝试 P-Code。
最后,如果您真的想坚持使用 Native Code,请尝试选择 No Optimization。
如果仍然无法正常工作,只需完成设置并取消选中不同的优化即可。
如果您在所有这些之后仍然遇到问题,请尝试打开项目中的每个表单和其他文件,并查看特定文件是否只是损坏,这可能导致突然退出。至少这样你就可以将它追踪到一个文件中。
如果这一切都失败了,请尝试在不同的操作系统上编译它 - 但我真的怀疑它会达到那个程度。
祝你好运!
【讨论】:
我尝试了 PhoeniX_2 的每一个建议。他们都没有工作。我不知道是什么让我尝试这个,但我上次编译时,我创建了一个新的 exe 文件名,而不是我以前版本中使用的文件名。谢天谢地,它奏效了。我不明白为什么。这不是权限问题或锁定文件问题。我认为这可能是因为新的编译覆盖了以前编译的 exe 文件。在 2 天的故障排除期间,计算机还重新启动了几次。
因此,如果 Phoenix 的任何建议都不适合您,请尝试编译一个新的 exe 文件名,而不是您之前编译时创建的。
【讨论】:
就我个人而言,我在 Windows XP 及更高版本中遇到了 VB6 IDE 的各种问题。
我保留了一个运行 Windows 2000 的虚拟机并在其中执行任何 VB6 工作。
我对它没有什么问题。如果有任何奇怪之处,我只需将 VM 恢复为基线安装。
【讨论】:
我已经找到了我们的原因。 我们有用户控件在 Initialize 事件期间尝试连接到数据库。这是一个非常糟糕的主意,因为此事件在编译期间以及在 IDE 加载期间运行。 它挂了很长时间试图连接到不存在的数据库,然后使编译过程崩溃,因此没有生成任何 Exe(尽管没有可见的迹象)。
解决方案是在从表单加载事件调用的公共方法中执行数据库连接和其他启动代码。 似乎没有任何可靠的方法来使用 Initialise。
【讨论】: