如何与用vb编写的基本cmd程序进行交互?

时间:2012-10-17 19:09:03

标签: vb.net nsis

感谢目前为止提供的所有帮助。我能够将$ Email变量发送到stdio流并在vb脚本中接收它。我现在遇到一些代码

的问题
Option Strict On

Imports MySql.Data.MySqlClient
Imports System.Runtime.Serialization

Module jrConnect

    Sub Main(ByVal cmdArgs() As String)
        Dim returnValue As Integer = 0
        ' See if there are any arguments.
        If cmdArgs.Length > 0 Then
            For argNum As Integer = 0 To UBound(cmdArgs, 1)

                Console.Write("your email address is " & cmdArgs(argNum))
                If cmdArgs(argNum) <> "" Then
                    Dim email As String = cmdArgs(argNum)
                    Console.Write("Your email is " & email)
                End If
             Next argNum
        End If
        Dim cs As String = "*********"
        Dim conn As New MySqlConnection(cs)
        Dim entID As String

        Try
            conn.Open()
            Dim stm As String = "SELECT ***** FROM **** WHERE email =" & "'" & email & "'"
            Dim cmd As MySqlCommand = New MySqlCommand(stm, conn)
            Dim reader As MySqlDataReader = cmd.ExecuteReader()

            While reader.Read()
                entID = reader.GetString(0)
            End While
            reader.Close()

            Dim stm2 = "SELECT ***** FROM ****** WHERE ***** = " & entID
            Dim cmd2 As MySqlCommand = New MySqlCommand(stm2, conn)
            Dim reader2 As MySqlDataReader = cmd2.ExecuteReader()
            Dim counter As Integer = 0

            While reader2.Read() And counter < 3
                Console.WriteLine(reader2.GetString(0) & "%")
                counter = counter + 1
            End While
            reader.Close()

        Catch ex As MySqlException
        Finally
            conn.Close()
        End Try

    End Sub

End Module

它会正确打印电子邮件地址,但是当它在sql语句中调用电子邮件地址时,它会声明“未声明电子邮件”是否在“Next argNum”命令中更改了它的值?它只将电子邮件写入控制台一次。如果有必要,这是我的NSIS脚本。

Outfile "test.exe"
Section
    SetOutPath $DOCUMENTS/
    Var /GLOBAL Email
    StrCpy $Email "spkelly8@gmail.com"

    nsExec::ExecToLog '"C:path/vbapp.exe" $Email'
    Pop $1
    Pop $2

    DetailPrint $1
    DetailPrint $2

SectionEnd

2 个答案:

答案 0 :(得分:1)

来自NSIS手册:

nsExec will execute command-line based programs and capture the output
without opening a dos box

你的console.Readline会期望某种交互,因为它没有连接到stdin / stdout,所以会失败。由于您不想要DOS框,并且您想通过stdin发送电子邮件字符串而不是手动输入,请使用ExecDos::exec

ExecDos::exec /TIMEOUT=2000 "$DOCUMENTS\VBApp.exe" "$Email$\n"

请注意$前面的\n,以便NSIS发送文字新行而不是字符串\n

答案 1 :(得分:0)

您正在尝试从stdin读取,但nsExec不提供您可以从stdin读取的任何数据。更改VB程序以解析命令行或使用ExecDosExecCmd如果您的子进程必须从stdin获取数据...