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不讀取/包含任何正確的這一個特殊命令?
我確定了另一個導致相同問題的命令。兩者都以某種方式「創建」命令,可能比其他命令花費的時間更長。 Migth是這個問題的原因嗎? –
你確定這兩個程序實際寫入標準輸出「嗎?他們兩個總是無法返回任何東西嗎? –
我這麼認爲。當我手動執行命令時,我看到我想要在Shell窗口中讀回的信息。我輸入的內容與我的代碼發送到cmd.exe的內容完全相同,並且兩者都是一樣的,因爲後面我可以在數據庫中看到相同的數據。 是否有可能,我在Shell窗口中看到的文本是不是我的程序可以讀取的stoudt流的一部分? 對於這兩個命令,當讀取stoudt流時,我總是會得到一個空字符串 對於所有其他命令,stoudt流包含我通常在Shell窗口中看到的內容。 –