2017-04-25 53 views
3

我們使用下面的代碼來獲取計算機的名稱。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語句(如果有),或嘗試使用其他方法與現有控制檯應用程序通信。

回答

0

因爲它似乎是一個錯誤,直到有人想出了一個更好的解決方案,這就是我會改變我的代碼:

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. 

感謝您的幫助。

0

我要做的第一件事就是驗證'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? –

0

看來問題可能不限於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

相關問題