如何从vb.net向cmd发送命令

如何从vb.net向cmd发送命令,vb.net,cmd,Vb.net,Cmd,我正在VB.NEt(Visual studio 2017)中开发应用程序,我想向CMD发送一些命令,并在多行文本框中接收输出。我该怎么做?而且只有一个cmd窗口应该是可见的有点谷歌搜索 Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click Dim CMDThread As New Threading.Thread(Address

我正在VB.NEt(Visual studio 2017)中开发应用程序,我想向CMD发送一些命令,并在多行文本框中接收输出。我该怎么做?而且只有一个cmd窗口应该是可见的

有点谷歌搜索

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
    Dim CMDThread As New Threading.Thread(AddressOf CMDAutomate)
    CMDThread.Start()
End Sub

Private Sub CMDAutomate()
        Dim myprocess As New Process
        Dim StartInfo As New System.Diagnostics.ProcessStartInfo
        StartInfo.FileName = "cmd" 'starts cmd window
        StartInfo.RedirectStandardInput = True
        StartInfo.RedirectStandardOutput = True
        StartInfo.CreateNoWindow = True '<---- if you want to not create a window
        StartInfo.UseShellExecute = False 'required to redirect
        myprocess.StartInfo = StartInfo
        myprocess.Start()
        Dim SR As System.IO.StreamReader = myprocess.StandardOutput
        Dim SW As System.IO.StreamWriter = myprocess.StandardInput
        SW.WriteLine(txtCommand.Text) 'the command you wish to run.....
        SW.WriteLine("exit") 'exits command prompt window
        txtResults.Text = SR.ReadToEnd 'returns results of the command window
        SW.Close()
        SR.Close()
End Sub
Private Sub btnSend\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnSend。单击
将CMDThread设置为新线程。线程(CMDThread的地址)
CMDThread.Start()
端接头
私有子cmdautomation()
Dim myprocess作为新流程
将StartInfo调暗为新系统.Diagnostics.ProcessStartInfo
StartInfo.FileName=“cmd”'启动cmd窗口
StartInfo.RedirectStandardInput=True
StartInfo.RedirectStandardOutput=True

StartInfo.CreateNoWindow=True'前面的答案几乎正确,但会带来跨线程错误。将cmd输出的返回文本放入一个变量中,然后在按钮中单击Sub后调用字符串,如下所示

在表单上创建一个名为:btnPowerShSend的按钮, 创建两个选中多行属性的文本框,称为: TXT结果& txtScript

        Public Class Form1
        Dim retText As String
    
        Private Sub BtnPowerShSend_Click(sender As Object, e As EventArgs) Handles btnPowerShSend.Click
            Dim CMDThread As New Threading.Thread(AddressOf CMDAutomate)
            CMDThread.Start()
            txtResults.Text = retText 'returns results of the command window
        End Sub
    
        Private Sub CMDAutomate()
            Dim myprocess As New Process
            Dim StartInfo As New System.Diagnostics.ProcessStartInfo
            StartInfo.FileName = "cmd" 'starts cmd window
            StartInfo.RedirectStandardInput = True
            StartInfo.RedirectStandardOutput = True
            StartInfo.CreateNoWindow = True '<---- if you want to not create a window
            StartInfo.UseShellExecute = False 'required to redirect
            myprocess.StartInfo = StartInfo
            myprocess.Start()
            Dim SR As System.IO.StreamReader = myprocess.StandardOutput
            Dim SW As System.IO.StreamWriter = myprocess.StandardInput
            SW.WriteLine(txtScript.Text) 'the command you wish to run.....
            SW.WriteLine("exit") 'exits command prompt window
    
            retText = SR.ReadToEnd.ToString
    
            SW.Close()
            SR.Close()
        End Sub
    End Class
公共类表单1
将文本设置为字符串
私有子BtnPowerShSend\u单击(发件人作为对象,e作为事件参数)处理BtnPowerShSend。单击
将CMDThread设置为新线程。线程(CMDThread的地址)
CMDThread.Start()
Text=retText'返回命令窗口的结果
端接头
私有子cmdautomation()
Dim myprocess作为新流程
将StartInfo调暗为新系统.Diagnostics.ProcessStartInfo
StartInfo.FileName=“cmd”'启动cmd窗口
StartInfo.RedirectStandardInput=True
StartInfo.RedirectStandardOutput=True

StartInfo.CreateNoWindow=True'我建议您应该从VBS运行批处理文件,而不是检查此文件:的可能重复。附件中有一个示例项目。代码是C#,但是它很容易阅读/翻译,并且注释可能很有用。这是用VB.Net语言编写的。