在VB.net中获取shell命令的输出
我有一个VB.net程序,在其中调用Shell函数。我想在一个文件中获取由该代码生成的文本输出。但是,这不是已执行代码的返回值,因此我不知道如何执行在VB.net中获取shell命令的输出,vb.net,windows,shell,Vb.net,Windows,Shell,我有一个VB.net程序,在其中调用Shell函数。我想在一个文件中获取由该代码生成的文本输出。但是,这不是已执行代码的返回值,因此我不知道如何执行 该程序是一项服务,但可以访问磁盘,没有问题,因为我已经记录了其他信息。整个服务有多个线程,因此我还必须确保在写入文件时,文件尚未被访问。是否将输出通过管道传输到文本文件 MyCommand > "c:\file.txt" 然后读取文件。您将无法从Shell捕获输出 您需要将其更改为一个流程,并且需要从流程中捕获(可能还有错误)流 以下是一个
该程序是一项服务,但可以访问磁盘,没有问题,因为我已经记录了其他信息。整个服务有多个线程,因此我还必须确保在写入文件时,文件尚未被访问。是否将输出通过管道传输到文本文件
MyCommand > "c:\file.txt"
然后读取文件。您将无法从Shell捕获输出 您需要将其更改为一个流程,并且需要从流程中捕获(可能还有错误)流 以下是一个例子:
Dim oProcess As New Process()
Dim oStartInfo As New ProcessStartInfo("ApplicationName.exe", "arguments")
oStartInfo.UseShellExecute = False
oStartInfo.RedirectStandardOutput = True
oProcess.StartInfo = oStartInfo
oProcess.Start()
Dim sOutput As String
Using oStreamReader As System.IO.StreamReader = oProcess.StandardOutput
sOutput = oStreamReader.ReadToEnd()
End Using
Console.WriteLine(sOutput)
要获取标准错误,请执行以下操作:
'Add this next to standard output redirect
oStartInfo.RedirectStandardError = True
'Add this below
Using oStreamReader As System.IO.StreamReader = checkOut.StandardError
sOutput = oStreamReader.ReadToEnd()
End Using
=======================================================================
创建一个分为两行的批处理文件,如下所示:
echo off
ipconfig
'确保将此批处理文件保存为ipconfig.bat或您决定选择的任何名称,但确保在其末尾添加点bat 事实上,我昨晚在读这篇文章之前确实找到了解决方案,非常接近。我将使用“>”,因为我希望每次都追加结果,但无论如何要谢谢你。我忘了提到你应该考虑<代码> MyCu命令>。“c:\file.txt 2>&1,如果还希望捕获文件中的错误报告。默认情况下,错误输出不包括在文件中。@马克:我不是下选者,但我可以解释:我讨厌使用“保存到文件”或“读取文件”。这是一个缓慢、糟糕且糟糕的代码,snipet已从代码框中滑出。如果oStartInfo.RedirectStandardOutput=True,cmd无法关闭:
echo off
ipconfig