Проблема запуска устаревшей программы в Windows 7 с использованием DDE - PullRequest
0 голосов
/ 07 апреля 2011

Мои администраторы столкнулись с большой проблемой, и я передаю их положение так:

У нас есть устаревшее приложение базы данных (написанное на 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)

Я знаю, что есть проблемы с 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.
 :
 :

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Программный файл, который вы «не можете изменить», фактически может быть отредактирован с помощью шестнадцатеричного редактора; делал это много раз назад в тот же день. Пути почти наверняка находятся внутри двоичного файла в читаемом текстовом формате.

За исключением этого, вы можете запустить XP внутри образа виртуальной машины (т. Е. Проигрывателя VMware) и установить на него программу; это они могут быть счастливее.

0 голосов
/ 07 апреля 2011

Я согласен, что это похоже на проблему с правами доступа.

Тем не менее ... вы уверены, что у вас нет возможности изменить его?Это не та функциональность, которая обычно предоставляется поставщиком - это больше похоже на пользовательскую модификацию.

Есть ли у вас файлы .p или .w?(Это исходный код Progress 4GL.) Или только .r файлы?(Это скомпилированный код.)

Запустите "showcfg" (значок "config" в меню "Пуск") - если у вас есть лицензии на разработку, это может быть скорее причиной того, что вы не знаете, как это изменить, чемне имея возможности изменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...