Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VB.net中获取shell命令的输出_Vb.net_Windows_Shell - Fatal编程技术网

在VB.net中获取shell命令的输出

在VB.net中获取shell命令的输出,vb.net,windows,shell,Vb.net,Windows,Shell,我有一个VB.net程序,在其中调用Shell函数。我想在一个文件中获取由该代码生成的文本输出。但是,这不是已执行代码的返回值,因此我不知道如何执行 该程序是一项服务,但可以访问磁盘,没有问题,因为我已经记录了其他信息。整个服务有多个线程,因此我还必须确保在写入文件时,文件尚未被访问。是否将输出通过管道传输到文本文件 MyCommand > "c:\file.txt" 然后读取文件。您将无法从Shell捕获输出 您需要将其更改为一个流程,并且需要从流程中捕获(可能还有错误)流 以下是一个

我有一个VB.net程序,在其中调用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