【问题标题】:VB.Net shell output sometimes not returningVB.Net shell 输出有时不返回
【发布时间】:2017-07-28 14:17:02
【问题描述】:

对于我所有的 Shell 命令的 99%,此代码工作正常,但对于一个命令,我没有得到返回的文本,通常在 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 中执行命令会生成相同的条目,我可以看到返回的文本。

有没有人知道为什么流阅读器不为这个特殊命令读取/包含任何内容?

【问题讨论】:

  • 我发现另一个导致同样问题的命令。两者都以某种方式“创建”命令,并且可能比其他命令花费更长的时间。这可能是问题的原因吗?
  • 你确定这两个程序实际上都写入标准输出吗?它们总是不能返回任何东西吗?
  • 我想是的。手动执行命令时,我在 Shell 窗口中看到了我想读回的信息。我输入的命令与我的代码发送给 cmd.exe 的命令完全相同。两者都做同样的事情,因为稍后我可以在我的数据库中看到相同的数据。是否有可能,我在 Shell 窗口中看到的文本不是我的程序可以读取的 stoudt 流的一部分?对于这两个命令,我在读取 studt 流时总是得到一个空字符串。对于所有其他命令,stoudt 流包含我通常在 Shell 窗口中看到的内容。
  • 另一个可能的问题。您在开始该过程后立即从输出流中读取。您可能希望在进程退出后但在关闭 Process 实例之前读取流。也许您遗漏了一些数据。

标签: vb.net shell streamreader


【解决方案1】:

精氨酸。我发现了问题。这两个命令将它们的输出发送到 StandardError 流。我不知道为什么,因为没有发生错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多