2013-03-25 273 views
1

我目前有一个32位的PowerBuilder应用程序,我们试图移植到Windows 7 64位环境。意识到PowerBuilder 10.5是在Window7发布之前就已经建立的,而且这个应用程序是在Windows XP 32位环境中构建的。PowerBuilder 10.5应用程序在Windows XP 32位到Windows 7 64位

在Windows 7 64位机器上部署时,32位PowerBuilder应用程序会吐出以下错误消息。 应用程序终止。错误:在功能在管线44指定了无效的数据窗口的行/列ivvisiblecolumn对象 objectwindow

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

我的问题是 - 是否有可能获得在64位环境中工作的32位应用程序?

到目前为止,客户要求提出可能的解决方案,而不必升级到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位应用程序在Windows 64位环境中工作,只需将某些DLL文件作为目标。一个例子是Microsoft Flight Simulator X,其中32位游戏会在Windows 7 64位中崩溃。解决方案是简单地获取名为uiautomationcore.dll的Vista 64位DLL文件并将其复制到Windows环境中。游戏还必须安装在C:的根目录才能工作。

有没有人有关于如何解决这个问题的建议?

我很抱歉如果我在这里的笔记模糊。

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

+1

运行带有/ PBDEBUG开关您的应用程序。 (创建一个快捷方式并在.EXE文件名后面添加该标志) 这将创建一个名为 .dbg的文件,它是从应用程序启动以来执行的所有语句的顺序列表。 像PBLPeeper这样的工具将帮助您读取.DBG文件并找出导致崩溃的原因。听起来不合理,但这很可能是您的代码中的一个错误,只能在新环境中执行。 – NoazDad 2013-03-25 18:36:25

+0

好的建议。我记得PBLPeeper的日子。还记得那个应用程序的开发者猫bmp的照片吗?我会试试这个,让你知道。 – user2207719 2013-03-26 13:05:44

回答

1
  • 基本上什么都不应该阻止10.5 PB应用程序在Win7/64上运行。我在一个win7/64上开发和运行PB11.5(也是一个32位IDE)的几个产品。顺便说一句,一些老的PB像9仍然运行在Win7上,所以可能是PB6.5。问题必须在其他地方,相对于应用程序设计。
  • 了WoW64(和Wow6432Node注册表)是不是一个真正的虚拟机,这与32位应用程序的回退迷上了一堆服务和系统的API(和遗留应用程序不符合,因为Vista中引入的新奇)
  • Error: Invalid DataWindow row/column specified at line 44 in function ivvisiblecolumn of object objectwindow听起来通常像一个处理不正确的返回值(其中计算行数在获得无效行之前尝试访问属性或数据之前变为负值或为空值),或者它可能与从自动增量值中取回自动增量值的方式有关插入后的数据库
  • 要小心可能导致传统应用程序出现意外行为的UAC管理,特别是在应用程序使用数据库的情况下:UAC准则指示不安装由a管理的数据应用于Program Files目前只读的文件夹(自Vista以来 - 该指南自XP开始)。相反,如果数据仅供当前用户使用,则必须将其放入ProgramData子目录(如果每个人都可以访问该目录),并将其存入用户本地AppData。 Win7/Vista可以通过在本地复制数据(在Users\username\AppData\Local\VirtualStore),同时假装它正在从Program Files访问它的应用程序,从而默默地符合标准...
  • 您可以尝试使用Dependency Walker寻找不正确的dll问题
+0

据我所知,一切都安装到根目录C:\ XXX文件夹中。安装程序实际上是一个可以从我们的网络驱动器中下载文件的光荣xcopy。 作为这个过程的一部分,他们给予'USERS'帐户完全控制该目录。我们这样做的原因是因为应用程序中有一个函数用于下拉最新的副本,并且需要这些权限。根据我刚刚分享的内容,我怀疑它是一个UAC问题。但是我可以根据你的好回答进行进一步调查,这些回应是我的想法。 – user2207719 2013-03-26 12:57:40

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 
+0

实际上,我们通过创建与'SySWOW64'exe的连接来解决32位ODBC的问题。所以数据库问题解决了。我在阅读了关于ODBC的Shenn的论文后才发现这一点,所以谢谢。 – user2207719 2013-03-26 12:56:43

+0

有没有人对64位机器上的PB 10.5运行时文件有任何经验?我想知道如果powerbuilder客户端运行时正在将其dll安装到应用程序C:\ XXX的正确位置或找不到它?想知道如何解决这个问题。 – user2207719 2013-03-26 12:58:52

相关问题