Мои администраторы столкнулись с большой проблемой, и я передаю их положение так:
У нас есть устаревшее приложение базы данных (написанное на Progress 4GL / OpenEdge), которое вызывает WordPerfect X3 для создания отчета. Путь к исполняемому файлу WordPerfect жестко задан в приложении базы данных, а также местоположение отсканированных PDF-файлов, которые должны быть вставлены в базу данных, , и у нас нет возможности изменить программу .
Большинство наших рабочих станций были успешно перенесены с WinXP на Win7 , и унаследованное приложение работает нормально, пока оно не пытается вызвать WordPerfect, говоря, что не может найти исполняемый файл ( даже если X3 установлен по тому же пути, что и в WinXP) ... то же самое с папкой отсканированных документов.
Есть предложения?
UPDATE:
Я провел этим утром, помогая своим администраторам с различными предложениями, которые вы все предоставили ... мы проверили права доступа к файлам, посмотрели на скомпилированные (.r) файлы с помощью Hex Editor (спасибо @Tom и @Ernest) и сделали поиск в файлах внутри всего исходного кода (.p) с помощью Notepad ++.
Вот что я нашел: программа НЕ вызывает WordPerfect напрямую (, как мне первоначально сообщили ), но вместо этого использует DDE. Вот сообщение об ошибке, которое выдает Progress 4GL:
![DDE INITIATE Failed. (3153)](https://i.stack.imgur.com/TPJN5.png)
Я знаю, что есть проблемы с DDE и Win7, поэтому мне было интересно, есть ли обходной путь, может быть, ключи реестра, которые нужно изменить, или что-то подобное.
Я включаю выдержку из исходного кода ниже, в надежде, что кто-то узнает, что происходит (я НЕ знаком с Progress 4GL, так что мне все понятно):
/* 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.
:
: