OpenEdge 10.2A - 在 Windows Windows 10 上更新 1703 后,INPUT THROUGH 集不起作用

OpenEdge 10.2A - INPUT THROUGH set does not work after Windows Update 1703 on Windows 10

我们使用下面的代码来获取计算机的名称。

def new shared var cHost as char format "x(40)" no-undo. 
INPUT THROUGH hostname NO-ECHO. 
SET cHost. 
INPUT CLOSE.
DISPLAY chost.

我们更新电脑后 (Windows 10 - 1703),它不再有效。似乎 SET cHost 是它失败的部分。我试过 IMPORT UNFORMATTED cHost 但它不起作用。

PS:我可以使用 OS-GETENV("COMPUTERNAME") 获取计算机名称,但我必须使用 INPUT THROUGH 语句。


编辑: 看来这不仅仅是10.2A的问题,而是更普遍的问题。此外,它不仅与 主机名 相关,而且与 所有控制台应用程序ms-dos 命令 相关。现在我将尝试用另一个 Progress 命令替换 INPUT THROUGH 语句,或者尝试用其他方法与现有的控制台应用程序通信。

我要做的第一件事是从命令 window.

验证 'hostname' 命令是否仍然正常工作

假设是,我会像这样编写您的代码段:

INPUT THROUGH VALUE( "hostname" ).
IMPORT UNFORMATTED cHost.
INPUT CLOSE.
DISPLAY cHOST format "x(60)".

这可能会揭示比 "it no longer works" 更有用的错误消息。

既然 COMPUTERNAME 满足您的需求,但出于某些非常神秘的原因您必须使用 INPUT THROUGH,您也可以尝试:

INPUT THROUGH VALUE( "echo %COMPUTERNAME%" ).
IMPORT UNFORMATTED cHost.
INPUT CLOSE.
DISPLAY cHOST format "x(60)".

看来问题可能不限于Openedge version 10。我是运行一个windows 10 winver 1703开发设备,使用Progress/Openedge 8.3,我不再能够执行这个。

    def var a as char format "x(70)".

    input through "echo %cd%" no-echo.
    import unformatted a.
    input close.

    message a. pause.

这在 windows 服务器 2012 R2 上运行,使用 progress/openedge 8.3。

Where 不再有效,它只是在输入命令时从程序中退出。

由于这似乎是一个错误,在有人提出更好的解决方案之前,这就是我更改代码的方式:

DEF VAR cHost AS CHAR FORMAT "x(40)" NO-UNDO. 
OS-CREATE-DIR VALUE("c:\temp").
OS-COMMAND SILENT VALUE("hostname >c:\temp\hostname.txt").
INPUT FROM VALUE("c:\temp\hostname.txt").
IMPORT UNFORMATTED cHost.
INPUT CLOSE.
MESSAGE cHost.

此代码也可用于其他 ms-dos 命令控制台应用程序

DEF VAR cHost AS CHAR FORMAT "x(40)" NO-UNDO. 
OS-CREATE-DIR VALUE("c:\temp").
OS-COMMAND SILENT VALUE("ECHO %cd% >c:\temp\result.txt").
INPUT FROM VALUE("c:\temp\result.txt").
IMPORT UNFORMATTED cHost.
INPUT CLOSE.
MESSAGE cHost.

感谢您的帮助。