我的行政人员遇到了一个大问题,我正在把他们的困境转述给:
我们有一个旧的数据库应用程序(写在Advancement4GL/OpenEdge中),它调用WordPerfect X3来生成报表。WordPerfect可执行文件的路径是在数据库应用程序中硬编码的,以及要插入到数据库中的扫描PDF的位置,我们无法修改程序。
我们的大多数工作站已经成功地从WinXP迁移到Win7,遗留应用程序在尝试调用WordPerfect之前运行良好,表示它找不到可执行文件(即使X3安装在WinXP上使用的完全相同的路径上).扫描的文档文件夹也是如此。
有什么建议吗?
更新:
今天早上我一直在帮我的管理人员提出各种建议.我们检查了文件权限,查看了带有十六进制编辑器的编译(.r)文件(谢谢@Tom和@Ernest),并使用Notepad++搜索了所有源代码(.p)中的文件。
这里是我发现的:程序并不是直接调用WordPerfect (正如我最初被告知的那样),而是使用DDE。以下是Advancement4GL生成的错误消息:

我意识到DDE和Win7存在问题,所以我想知道是否存在需要修改的注册表项,或者对其有什么影响。
我将从下面的源代码中摘录一段内容,希望有人能认识到正在发生的事情(我不太熟悉Advancement4GL,所以对我来说这都是希腊语):
/* setup DDE communicaiton with WordPerfect 12 */
/* and perform the merge of the various document */
DEFINE VARIABLE sys AS INTEGER NO-UNDO.
DEFINE VARIABLE mline AS CHAR FORMAT "x(220)" NO-UNDO.
DEFINE VARIABLE intResult AS INTEGER NO-UNDO.
DEFINE VARIABLE err-status AS INTEGER.
{GLOBVAR.I}
DEFINE VAR C-Win AS WIDGET-HANDLE NO-UNDO.
DEFINE FRAME FRAME-b
WITH 1 DOWN KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 13 ROW 4.1
SIZE 11 BY 2
TITLE "FRAMEWP".
IF SESSION:DISPLAY-TYPE = "GUI":U THEN
CREATE WINDOW C-Win ASSIGN
HIDDEN = YES
HEIGHT = 4
WIDTH = 20
MAX-HEIGHT = 4
MAX-WIDTH = 20
VIRTUAL-HEIGHT = 4
VIRTUAL-WIDTH = 20
RESIZE = yes
SCROLL-BARS = no
STATUS-AREA = no
BGCOLOR = ?
FGCOLOR = ?
KEEP-FRAME-Z-ORDER = yes
THREE-D = yes
MESSAGE-AREA = no
SENSITIVE = YES.
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(C-Win)
THEN C-Win:HIDDEN = NO.
VIEW FRAME DEFAULT-FRAME IN WINDOW C-Win.
VIEW FRAME FRAME-b IN WINDOW C-Win.
C-Win.
ENABLE ALL WITH FRAME FRAME-B TITLE "".
ASSIGN FRAME FRAME-B:VISIBLE = FALSE.
OS-DELETE VALUE(pass-txtout).
PAUSE 1 NO-MESSAGE IN WINDOW c-win.
OS-DELETE VALUE(pass-mergedoc).
pass-shelldoc = '"' + trim(pass-shelldoc) + '"'.
pass-shelldoc = TRIM(pass-shelldoc).
pass-txtfile = '"' + TRIM(pass-txtfile) + '"'.
pass-txtfile = TRIM(pass-txtfile).
pass-txtout = '"' + TRIM(pass-txtout) + '"'.
pass-txtout = TRIM(pass-txtout).
pass-mergedoc = '"' + TRIM(pass-mergedoc) + '"'.
pass-mergedoc = TRIM(pass-mergedoc).
DDE INITIATE sys FRAME FRAME FRAME-B:HANDLE APPLICATION "wpwin13_macros" TOPIC "COMMANDS".
/* create a wp doc from the pass-txtfile just created */
mline = "Application (WordPerfect; " + '"WordPerfect"' + '; Default!; "EN")'.
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "FileNew ()".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportSetFileName (Filename: " + pass-txtfile + ")".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportSetSource (SourceType: ASCII!)".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportSetDestination (DestinationType: MergeData!)".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportSetSizeToFit (State: No!)".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportSetAsciiFieldDelimiter (FieldDelimiter: " + '"^"' + ")".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportSetAsciiRecordDelimiter (RecordDelimiter: " + '"%"' + ")".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportSetAsciiStrip (StripChars: " + '""' + ")".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportSetAsciiEncap (EncapsulationChar: " + '"""' + '""' + ")".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "ImportDoImport ()".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "WAIT(10)".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "FileSave (Filename: " + pass-txtout + "; ExportType: WordPerfect_6_7_8!; yes!)".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "Close()".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
/* perform the merge using sheldoc, pass-txtout and pass-shelldoc */
mline = "Application (WordPerfect; " + '"WordPerfect"' + '; Default!; "EN")'.
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "MergeRUN(Formfile!;" + pass-shelldoc + ";DataFile!;".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = mline + pass-txtout + ";TOFILE!;" + pass-mergedoc + ")".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "CLOSE()".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
IF substring(pass-mergedoc,16,3) = "D12" THEN.
ELSE
DO:
mline = "FileOpen (Filename: " + pass-mergedoc + ")".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "AppMaximize ()".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
mline = "APPRESTORE ()".
mline = TRIM(mline).
DDE EXECUTE sys COMMAND mline.
END.
DDE TERMINATE sys NO-ERROR.
:
:发布于 2011-04-07 10:05:57
我同意这听起来很像权限问题。
尽管如此..。你确定你没有办法修改它吗?这不是通常由供应商提供的那种功能--听起来更像是定制的修改。
您有.p或.w文件吗?(这些是Advancement4GL源代码。)还是只有.r文件?(这是编译后的代码。)
运行"showcfg“(开始菜单上的"config”图标) --如果您有开发许可证,可能更多的是不知道如何更改它,而不是没有更改它的能力。
发布于 2011-04-06 21:35:59
实际上,您“无法修改”的程序文件可以使用十六进制编辑器进行编辑;在过去,已经多次这样做了。路径几乎可以肯定地位于二进制文件内,具有可读的文本格式。
否则,您可以在VM映像(即VMware player)中运行XP并在其上安装程序;它们可能会更快乐。
https://stackoverflow.com/questions/5573169
复制相似问题