2017-07-27 164 views
0

對於99%的Shell命令,此代碼可以正常工作,但對於只有一個命令,我不會收到返回的文本,這通常在Shell窗口中可見。下面是我用它來執行命令和讀回結果代碼:VB.Net shell輸出有時不會返回

Function RunCommandCom(command As String, arguments As String) As String() 
 

 
Dim p As Process = New Process() 
 
Dim pi As ProcessStartInfo = New ProcessStartInfo() 
 
Dim output As String 
 

 
pi.Arguments = " " + "/c" + " " + command + " " + arguments 
 
pi.FileName = "cmd.exe" 
 
pi.RedirectStandardOutput = True 'pi.CreateNoWindow = True 
 
pi.WindowStyle = ProcessWindowStyle.Normal 
 
pi.UseShellExecute = False 
 
p.StartInfo = pi 
 
p.Start() 
 
output = p.StandardOutput.ReadToEnd() 
 
p.WaitForExit() 
 
p.Close() 
 

 
If output Is "" 
 
Then 
 
Return Nothing 
 
Else 
 
Return output.Replace(Chr(13), "").Split(Chr(10)) 
 
End If 
 

 

 
End Function

使問題的命令被執行罰款。它將在數據庫中創建一個條目,該條目在調用我的功能後肯定存在。在Shell中直接執行命令會生成相同的條目,我可以看到返回的文本。

有沒有人有一個想法,爲什麼streamreader不讀取/包含任何正確的這一個特殊命令?

+0

我確定了另一個導致相同問題的命令。兩者都以某種方式「創建」命令,可能比其他命令花費的時間更長。 Migth是這個問題的原因嗎? –

+0

你確定這兩個程序實際寫入標準輸出「嗎?他們兩個總是無法返回任何東西嗎? –

+0

我這麼認爲。當我手動執行命令時,我看到我想要在Shell窗口中讀回的信息。我輸入的內容與我的代碼發送到cmd.exe的內容完全相同,並且兩者都是一樣的,因爲後面我可以在數據庫中看到相同的數據。 是否有可能,我在Shell窗口中看到的文本是不是我的程序可以讀取的stoudt流的一部分? 對於這兩個命令,當讀取stoudt流時,我總是會得到一個空字符串 對於所有其他命令,stoudt流包含我通常在Shell窗口中看到的內容。 –

回答

0

Arg。我發現了這個問題。這兩個命令將其輸出發送到StandardError流。我不知道爲什麼,因爲沒有發生錯誤。

相關問題