0

私の管理者は大きな問題に遭遇しました。私は彼らの窮状を SO に伝えています。

レポートを生成するためにWordPerfect X3を呼び出すレガシー データベース アプリケーション (Progress 4GL/OpenEdge で記述) があります。WordPerfect 実行可能ファイルへのパスは、データベース アプリ内でハードコーディングされており、データベースに挿入されるスキャン済み PDF の場所もハードコードされており、プログラムを変更する方法はありません

ほとんどのワークステーションはWinXPからWin7に正常に移行されており、レガシー アプリケーションは WordPerfect を呼び出そうとするまで正常に動作し、実行可能ファイルが見つからないと言って (WinXP で使用されているのとまったく同じパスに X3 がインストールされていても) ..スキャン文書フォルダも同様です。

助言がありますか?


アップデート:

私は今朝、あなたが提供したさまざまな提案で管理者を支援しました...ファイルのアクセス許可を確認し、コンパイルされた(.r)ファイルを16進エディターで調べ(@Tomと@Ernestに感謝)、検索を行いましたNotepad++ を使用して、すべてのソース コード (.p) 内のファイル。

これが私が見つけたものです: プログラムはWordPerfectを直接呼び出していません(私が最初に知らされたように)、代わりにDDEを使用しています. Progress 4GL が生成するエラー メッセージは次のとおりです。

DDE の開始に失敗しました。 (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.
 :
 :
4

2 に答える 2

1

「変更する方法がない」プログラムファイルは、実際には16進エディターで編集できます。昔は何度もやった。パスは、読み取り可能なテキスト形式でバイナリ ファイル内にあることはほぼ確実です。

それがなければ、VM イメージ (つまり、VMware プレーヤー) 内で XP を実行し、その上にプログラムをインストールすることができます。彼らがもっと幸せになるかもしれません。

于 2011-04-06T21:35:59.020 に答える
0

権限の問題によく似ていることに同意します。

それにもかかわらず、それを変更する方法がないと確信していますか? これは、ベンダーが通常提供するような機能ではなく、カスタムの変更のように聞こえます。

.p または .w ファイルがぶら下がっていますか? (これらは Progress 4GL ソース コードです。) それとも .r ファイルだけですか? (これはコンパイルされたコードです。)

"showcfg" (スタート メニューの "config" アイコン) を実行します。開発ライセンスを持っている場合は、変更する機能がないというよりも、変更方法を知らない可能性があります。

于 2011-04-07T10:05:57.460 に答える