1

我目前有一个 32 位 PowerBuilder 应用程序,我们正在尝试将其移植到 Windows 7 64 位环境。意识到 PowerBuilder 10.5 是在 Window7 出现之前构建的,以及这个应用程序构建在 Windows XP 32 位环境中的明显事实。

32 位 PowerBuilder 应用程序在 Windows 7 64 位计算机上部署时会出现以下错误消息。 应用程序终止。错误:在对象objectwindow的函数ivvisiblecolumn的第 44 行中指定的 DataWindow 行/列无效

数据库配置文件设置指向 OLEDB,后端数据库是 MSSQL 2008。目前该应用程序确实在 Windows7 64 位环境中运行,并且似乎仅在查询模式下工作。这意味着我们可以读取数据窗口上的一些记录,但是一旦您尝试进行交易,它就会爆炸。

我的问题是 - 是否可以让 32 位应用程序在 64 位环境中运行?

到目前为止,客户要求提出可能的解决方案,但没有升级到 PowerBuilder 12.5 的想法。本质上,他们希望保持在 10.5,但让应用程序从 32 位环境运行到 64 位……如果你明白我的意思的话,苹果到橙子。需要进一步调查代码是否无法在 64 位中运行,或者 64 位中 powerbuilder 客户端运行时的 dll 问题。他们真的试图远离任何应用程序重写,因为应用程序比基督成为木匠时更古老。我认为该应用程序最初是在 PB 6.5 中构建的。

到目前为止,我有以下想法,但我对此并不陌生: - 我了解 Windows 7 带有虚拟机 IIRC。我认为它被称为WOW64。是否可以在服务器上创建虚拟机并让用户在 64 位机器中运行 32 位应用程序?然后创建某种快捷方式供用户简单地点击?

  • 我们确实有一台虚拟 XP 机器和一台虚拟 Windows7 64 位机器用于测试。PowerBuilder 10.5 实际安装在 Windows 7 上并且似乎运行良好。然而,在运行模式或调试下运行应用程序会导致许多错误,如您所想。
  • 该应用程序已在 XP 中构建并在 Windows 7 上运行,但结果出现上述错误消息。
  • 我还没有研究在兼容模式下运行,但是团队告诉我它不起作用。
  • 我还没有看过 UAC 或 ALC 用户管理。这会影响 64 位系统吗?

  • 我知道这与应用程序无关,但是...我已经看到在某些情况下,32 位应用程序只需针对某些 DLL 文件即可在 Windows 64 位环境中工作。一个示例是 Microsoft Flight Simulator X,其中 32 位游戏会在 64 位 Windows 7 中崩溃。解决方案是简单地获取一个名为 uiautomationcore.dll 的 Vista 64 位 DLL 文件并将其复制到 Windows 环境中。游戏还必须安装在 C: 的根目录上才能运行。

有人对我如何解决这个问题有任何建议吗?

如果我在这里的笔记含糊不清,我深表歉意。

更新:有人在 64 位机器上使用过 PB 10.5 运行时文件吗?我想知道 powerbuilder 客户端运行时是否将其 dll 安装到应用程序 C:\XXX 的正确位置或找不到它?想知道如何解决这个问题。

4

2 回答 2

1
  • 基本上没有什么可以阻止 10.5 PB 应用程序在 Win7/64 上运行。我在 PB11.5(也是一个 32 位 IDE)中在 win7/64 上开发和运行了几个产品。顺便说一句,一些像 9 这样的旧 PB 仍然在 Win7 上运行,所以很可能是 PB6.5。与应用程序设计相关的问题肯定出在其他地方。
  • WoW64(和注册表中的 Wow6432Node)不是一个真正的 VM,它是一组服务和系统 API,与 32 位应用程序(以及不符合自 Vista 以来引入的新事物的旧应用程序)的回退挂钩
  • Error: Invalid DataWindow row/column specified at line 44 in function ivvisiblecolumn of object objectwindow听起来通常像一个错误处理的返回值(在尝试访问给定无效行的属性或数据之前,计算的行号变为负数或 null),或者它可能与从插入后的 db
  • 当心 UAC 管理可能导致遗留应用程序出现意外行为,特别是如果应用程序正在使用数据库:UAC 指南告诉不要将应用程序管理的数据安装在Program Files现在只读的文件夹中(从 Vista 开始 - 该指南是自 XP 以来)。相反,如果每个人都可以访问它,则必须将其放入ProgramData子目录;AppData如果数据仅适用于当前用户,则必须将其放入本地用户。Win7/Vista 可以通过将数据本地复制给用户(Users\username\AppData\Local\VirtualStoreProgram Files.
  • 您可以尝试使用Dependency Walker来查找不正确的 dll 问题
于 2013-03-25T15:34:45.967 回答
0

我们将许多应用程序移至 Windows 7 64 位。我们遇到的唯一问题是数据库连接。您正在运行一个 32 位应用程序,因此您需要连接到 32 位数据库。如果您从控制面板中调出“数据源 (ODBC)”,您将看到 64 位条目。您需要使用“C:\Windows\SysWOW64\odbcad32.exe”中的 32 位 ODBC。您需要的注册表项位于以下位置...

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\ODBC Data Sources

或者

HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI
HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers
HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\ODBC\ODBC.INI
HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\ODBC Data Sources
于 2013-03-25T15:49:47.943 回答