Как прочитать вывод cmd в VB.NET из оболочки cmd?
Я использую gnokii для отправки SMS-сообщений.
Мои коды VB:
Dim xCmd As String
xCmd = "cmd.exe /c echo msgcontent "| c:\gnokii\gnokii.exe --sendsms 12345678"
Shell(xCmd)
Обратите внимание:
Я попытался перенаправить вывод в файл.txt, но файл.txt кажется пустым. Кроме того, программе, возможно, придется отправлять несколько SMS-сообщений каждую секунду, поэтому создание.txt невозможно.
Process.Start () невозможен, потому что я должен проверить, запущен ли gnokii.exe.
Мне нужен вывод, чтобы проверить, успешно ли отправлено SMS.
Я попытался использовать (коды ниже), но это тоже не сработало; вывод не был показан.
Функция exe(ByVal fileName, ByVal args)
Dim p As Process = New Process Dim output As String With p .StartInfo.CreateNoWindow = True .StartInfo.UseShellExecute = False .StartInfo.RedirectStandardOutput = True .StartInfo.FileName = fileName .StartInfo.Arguments = args .Start() output = .StandardOutput.ReadToEnd End With Return output
Конечная функция
4 ответа
Чтобы отправить вывод в файл.txt, (лучшее решение, которое я могу найти)
ЗАМЕНА
xCmd = "cmd.exe /c echo msgcontent "| c:\gnokii\gnokii.exe --sendsms 12345678 > file.txt"
С
xCmd = "cmd.exe /c echo msgcontent "| c:\gnokii\gnokii.exe --sendsms 12345678 2> file.txt"
Попробуй это:
Dim p As Process = New Process
Dim output As String
With p
.StartInfo.CreateNoWindow = True
.StartInfo.RedirectStandardOutput = True
.StartInfo.UseShellExecute = False
.StartInfo.FileName = fileName
.StartInfo.Arguments = args
.Start()
output = .StandardOutput.ReadToEnd
.WaitForExit()
End With
Return output
Я мог бы предложить что-то вроде этого, сам. Это похоже на то, что опубликовал кто-то еще, но я думаю, что он предлагает немного больше функциональности.
Imports System.IO
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Shell("cmd.exe /c " & TextBox1.Text + " > c:\temp\output.txt")
Dim read As System.IO.StreamReader
read = File.OpenText("c:\temp\output.txt")
RichTextBox1.Clear()
Do Until read.EndOfStream
RichTextBox1.Text += read.ReadLine & vbCrLf
Loop
RichTextBox1.Select(RichTextBox1.Text.Length, 0)
RichTextBox1.ScrollToCaret()
End Sub
End Class
Вы можете использовать это 100% работ, но он покажет вам только результаты
Как показать результаты оболочки в vb.net:
'create 1 textbox1
'create 1 button1
'create 1 richtextbox1
'in the start up directory of this program make a file could 123.text
'------------------------------------------------------------------------
Dim read As System.IO.StreamReader
read = File.OpenText(Application.StartupPath & "\123.text")
Shell("cmd.exe /c" & TextBox1.Text + ">123.text")
Do Until read.EndOfStream
RichTextBox1.Text = read.ReadLine & vbCrLf
Loop
'--------------------------------------------------------------------------
'you can add on the top to create the file if it does not exists,
If IO.File.Exists(Application.StartupPath & "\123.text") = False Then
IO.File.Create(Application.StartupPath & "\123.text")
End If
'-------------------------------------------------------------------------
Код также доступен по этой ссылке http://pastebin.com/iEhv61jG