OpenEdge 10.2A - 在Windows 10上的Windows Update 1703之后,INPUT THROUGH设置不起作用

问题描述:

我们使用下面的代码来获取计算机的名称。OpenEdge 10.2A - 在Windows 10上的Windows Update 1703之后,INPUT THROUGH设置不起作用

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( “计算机”)计算机名称,但我必须这样做,使用INPUT THROUGH声明。


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

因为它似乎是一个错误,直到有人想出了一个更好的解决方案,这就是我会改变我的代码:

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. 

感谢您的帮助。

我要做的第一件事就是验证'hostname'命令是否仍然可以从命令窗口正常工作。

假设,这是我想你的代码片段是这样的:

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

这可能显示不是“它不再作品”一个更有用的错误消息。

由于COMPUTERNAME满足您的需求,但你必须通过使用输入一些很神秘的原因,你也可以尝试:

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

嗨汤姆,我很高兴你是对我的问题作出回应的人。我已经检查过,** hostname **和** echo%computername%**命令仍然有效。 我没有写任何错误消息,因为它没有给出任何。它不显示任何东西。它就像没有显示命令一样运行。但是,如果删除** SET cHost **行,则会显示一个空白字符串的过程编辑器屏幕,因为它应该如此。我试过你的代码,它是一样的;代码运行,但没有过程编辑器屏幕出现,就好像没有显示命令一样。 – aza

+0

我发现这个问题适用于**所有控制台应用程序**返回任何值。我已经使用c#和vb.net编写了示例控制台应用程序来测试问题,我也使用了一个虚拟bat文件进行了测试,问题仍然存在。 – aza

+0

你是说它在SET(或IMPORT)语句中“挂起”并且没有进入DISPLAY? –

看来问题可能不限于Openedge版本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。

不再有效的地方,当它碰到导入命令时,它就从程序中退出。

+0

然后这是一个更普遍的问题。如果你把它放在一个过程中并调用它,它只会退出被调用的过程,程序继续工作。我针对不同的案例进行了测试;看起来这个问题发生在**所有控制台应用程序**和** ms-dos命令**上。我希望有人提出一个解决方案,因为有些程序调用是我无法更改的,因为它们是用其他语言编写的。这也意味着我们无法与其他程序进行沟通:(。 – aza