如何保持旧的VB6应用程序在Windows Vista和Windows 7中运行?

我有一个旧的VB6应用程序,我仍然试图支持。 一些用户在Vista或Windows 7中运行应用程序时报告了奇怪的崩溃。日志文件在这些崩溃之后没有显示任何内容,但客户报告错误消息显示“OLE something …”,如果它们什么都看不到

在我自己的Vista或Windows 7上运行程序时,我从来没有能够重现这些崩溃,所以我基本上没有什么问题的信息。

我怀疑是VB6应用程序所依赖的数十亿个DLL中的一个或多个版本的问题。 该应用程序还使用lame_enc.dll,它引入了一些更多的依赖项。

我猜这是VB6应用程序的一个常见问题(尽pipe10年前我可能只是一个程序员)。 那里有一些神奇的安装程序/更新,确保所有的VB6依赖是他们需要为VB6应用程序正常工作?

一种选择是联系Microsoft技术支持。 Windows 7 完全支持 VB6运行时。您可能需要支付“支持事件”,或者可能是免费的,例如,如果您有MSDN订阅(最好是获得一个)。

让用户以XP兼容模式运行应用程序。 只需将一个快捷方式拖到桌面上,右键单击“属性”。 然后在“兼容性”选项卡上将其设置为“以兼容模式运行:”并选择“Windows XP(Service Pack 3)”。 还“禁用高DPI设置显示缩放”。 看看是否有帮助。 它可能会。

如果Comaptibility Mode不起作用,那么也有XP模式 。 这在XP虚拟机中虚拟化了整个环境,但也允许它与主机操作系统进行交互。 它只适用于Windows 7。

对于一些试图在Windows 7上运行我们的应用程序的客户,我们只是普遍的奇怪的行为。在一种情况下,应用程序的主工具栏(一个标准的MSComctlLib.Toolbar控件)完全是空的(没有出现图标或分隔条)。 我们很迷惑。 该程序没有崩溃,图标只是根本不在那里。 应用程序的错误日志中没有任何内容,Windows事件日志中没有任何内容。 我们甚至确保应用程序被配置为在Windows XP兼容模式下运行,但没有骰子。 据我们所知,正确的DLL被安装和注册,并且我们已经在相同版本的Windows 7上运行相同的应用程序,因此没有任何问题。

在一个有些讽刺的决定,不久之前,我们决定正式支持Windows 7,同时指出我们不会正式支持Vista(尽管一些客户在Vista上运行应用程序没有任何问题)。 起初,这可能听起来像一个奇怪的决定,但有两个很好的理由为什么这是有道理的:

  • 大多数新电脑都预装了Windows 7,而大多数客户因为所有的FUD而升级到Vista,都对从XP升级到Windows 7非常感兴趣。

  • Windows 7支持XP Mode ,它允许您在运行Windows XP SP3的虚拟机中运行应用程序。 我们的一些客户已经走了这条路,没有人报告过这种方式运行我们的应用程序的任何问题。 因为您正在实际的Windows XP环境中运行您的应用程序,出现问题的可能性要小得多。

尝试像Installshield这样的第三方安装程序。 我有一个VB6应用程序没有安装和运行Win 7使用原来的安装程序正常,但是当我把它通过最近版本的Installshield它现在工作正常。

我也会投票给XPMode。

但是,如果你仍然有问题,Dependency Walker是一个很好的免费工具,可以扫描exe / dll / ocx,并构建所有依赖模块/ dll的树形图。 即使没有这个问题,它也有助于解决安装问题。

http://www.dependencywalker.com/

另外,过去我们有几个问题,写入注册表的地方用户没有适当的安全权限,导致类似的问题。 你可以检查这些函数的代码,如果你有它们。