我目前有一个32位的PowerBuilder应用程序,我们正试图将其移植到Windows 7 64位环境中。很明显,PowerBuilder 10.5是在Windows 7发布之前构建的,而且这个应用程序是在Windows XP 32位环境中构建的。
32位的PowerBuilder应用程序在Windows 7 64位机器上部署时吐出以下错误消息。应用程序终止。错误:对象 objectwwindow
的函数 ivvisibleccolumn 第44行指定的无效数据窗口行/列数据库配置文件设置指向OLEDB,后端数据库是MSSQL 2008。目前,该应用程序在Windows7 64位环境下运行,似乎只能在查询模式下工作。这意味着我们可以读取数据窗口上的一些记录,但是当您试图进行事务处理时,它就会爆炸。
我的问题是-是否有可能在64位环境中获得32位应用程序?
到目前为止,客户要求提出可能的解决方案,而不需要升级到PowerBuilder 12.5。从本质上讲,他们希望保持在10.5版本,但同时又能让应用从32位运行到64位……苹果和橘子,如果你明白我的意思。需要进一步调查代码是否不能在64位运行,或者64位的powerbuilder客户端运行时的dll问题。他们真的试图避免重写任何应用程序,因为应用程序比基督还是木匠的时候还要古老。我想这个应用程序最初是在pb6.5中构建的。
到目前为止,我有以下想法,但我是新的:我知道Windows 7自带一个虚拟机IIRC。我想应该叫WOW64。是否有可能在服务器上创建一个虚拟,并让用户在64位机器上运行32位应用程序?然后创建一个快捷方式,让用户简单地点击?
- 我们有一台虚拟XP机和一台虚拟Windows7 64位机用于测试。PowerBuilder 10.5实际上安装在Windows 7上,看起来运行良好。但是,在运行模式或调试模式下运行应用程序会导致您可以想象的许多错误。
- 该应用程序已在XP中构建并在Windows 7上运行,但结果产生上述错误信息
- 我还没有看到在兼容模式下运行,但我被团队告诉它不会工作。
我还没有看过UAC或ALC用户管理。这会影响64位系统吗?
我知道这与应用程序无关,但是…在某些情况下,我看到32位应用程序通过简单地针对某些DLL文件在64位windows环境中工作。例如,微软飞行模拟器X的32位游戏在64位的windows 7上会崩溃。解决这个问题的方法是简单地获取一个名为uiautomationcore.dll的Vista 64位DLL文件,并将其复制到windows环境中。游戏也必须安装在C:目录下才能运行
谁有什么建议,我该如何处理这个问题?
如果我在这里的笔记中含糊不清,我道歉。
UPDATE:有没有人在64位机器上使用pb10.5运行时文件的经验?我想知道powerbuilder客户端运行时是否将其dll安装到应用程序C:XXX的正确位置或找不到它?
- 基本上没有什么可以阻止一个10.5 PB的应用程序在Win7/64上运行。我在win7/64上开发和运行PB11.5(也是32位IDE)中的几个产品。顺便说一句,一些旧的PB,比如9,仍然在Win7上运行,所以可能是PB6.5。问题肯定在其他地方,与应用程序设计有关。
- WoW64(和注册表中的Wow6432Node)不是一个真正的虚拟机,它是一堆服务和系统API,为32位应用程序(以及不符合Vista以来引入的新特性的遗留应用程序)提供回退。
-
Error: Invalid DataWindow row/column specified at line 44 in function ivvisiblecolumn of object objectwindow
听起来通常像一个错误处理的返回值(其中计算的行号是获得负或null之前试图访问一个属性或数据在给定的无效行),或者它可能是相对于从数据库中获得一个自动增量值插入后的方式 - 小心UAC管理,这可能会导致遗留应用程序的意外行为,特别是如果应用程序使用数据库:UAC指导方针告诉不要将应用程序管理的数据安装在
Program Files
文件夹中,该文件夹现在是只读的(自Vista以来-该指导方针自XP以来)。相反,如果每个人都可以访问它,则必须将其放入ProgramData
子目录中;如果数据仅用于当前用户,则必须将其放入用户本地AppData
中。Win7/Vista可以通过将本地数据复制给用户(在UsersusernameAppDataLocalVirtualStore
中),同时仍然假装应用程序当前正在从Program Files
访问它,从而默默地符合标准。 - 你可以尝试使用Dependency Walker来查找不正确的dll问题
我们将许多应用程序迁移到Windows 7 64位。我们遇到的唯一问题是数据库连接。您正在运行一个32位应用程序,因此您需要连接到32位数据库。如果您从控制面板中弹出"数据源(ODBC)",您将看到64位条目。您需要使用"C:WindowsSysWOW64odbcad32.exe"中找到的32位ODBC。您需要的注册表项位于以下位置…
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeODBCODBCINST.INI
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeODBCODBCINST.INIODBC Drivers
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeODBCODBC.INI
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeODBCODBC.INIODBC Data Sources
或
HKEY_CURRENT_USERSOFTWAREWow6432NodeODBCODBCINST.INI
HKEY_CURRENT_USERSOFTWAREWow6432NodeODBCODBCINST.INIODBC Drivers
HKEY_CURRENT_USERSOFTWAREWow6432NodeODBCODBC.INI
HKEY_CURRENT_USERSOFTWAREWow6432NodeODBCODBC.INIODBC Data Sources