2013-07-02 98 views
1

我是控制台应用程序的新手。我需要从Web应用程序向控制台应用程序传递两个命令行参数,并从控制台应用程序获取返回的结果。控制台应用程序返回值

这里我试着在我们

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

     Dim proc = New Process() With { _ 
     .StartInfo = New ProcessStartInfo() With { _ 
     .FileName = "C:\Users\Arun\Documents\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe", _ 
     .Arguments = TextBox1.Text & " " & TextBox2.Text, _ 
     .UseShellExecute = False, _ 
     .RedirectStandardOutput = True, _ 
     .CreateNoWindow = True _ 
     } _ 
    } 

     proc.Start() 

     proc.WaitForExit() 
     Response.Write(proc.ExitCode.ToString()) 


    End Sub 

我的控制台应用程序代码

Public Function Main(sArgs As String()) As Integer 


     Return sArgs(0) 


    End Function 

,但我不能从控制台app.What返回值的问题,谁能帮助?

回答

2

这不是将参数传递给VB.NET控制台程序的方式(如您所见,here)。

一个例子:

Module Module1 

    Sub Main() 
     For Each arg As String In My.Application.CommandLineArgs 
      Console.WriteLine(arg) 
     Next 
    End Sub 

End Module 

如果你生成一个控制台项目EXE(APP.EXE)只在上面的代码组成,并呼吁它(从CMD)是这样的:[full_path]app 1 2,你会得到1 2打印在你的屏幕上。

因此,你所要做的就是检索的参数。

--------更新的具体要求完毕后才解释的更好

.Arguments你必须把你只是想传递给控制台应用程序的参数。

您可以通过依赖简单的临时文件返回不止一个整数给调用程序。例如:

控制台程序:

Dim writer As New System.IO.StreamWriter("temp") 

writer.Write("anything") 
writer.Close() 

调用程序:

Dim reader As New System.IO.StreamReader("temp") 
Dim line As String 
Do 
    line = sr.ReadLine() 'reading anything passed from the console 
Loop Until line Is Nothing 
reader.Close() 

Try 
    System.IO.File.Delete("temp") 
Catch ex As Exception 

End Try 
+0

然后proc.Start后()。 ..我会写什么代码来获取我的控制台应用程序输出 – Arun

+0

取决于您期望的输出种类。一个简单的整数?依靠exitcode。那就是:控制台中的Enviroment.ExitCode和winform中的proc.ExitCode。 – varocarbas

+0

我们可以从控制台应用程序返回多个值吗? – Arun

2

您本身不能返回两个单独的参数,you are limited A 32-bit signed integer

我能想到这样做的唯一途径这是如果你有两个数值,你可以保证每个值小于16位,那么你可以将它们中的一个按位移到一个32位值中。

此代码应该让你开始:

Public Shared Function CombineValues(val1 As Int16, val2 As Int16) As Int32 
    Return val1 + (CInt(val2) << 16) 
End Function 

Public Shared Sub ExtractValues(code As Int32, ByRef val1 As Int16, ByRef val2 As Int16) 
    val2 = CShort(code >> 16) 
    val1 = CShort(code - (CInt(val2) << 16)) 
End Sub 

用法(控制台):

'in your console app combine two int16 values into one Int32 to use as the exit code 
    Dim exitCode As Int32 = CombineValues(100, 275) 
    Debug.WriteLine(exitCode) 'Output: 18022500 

使用(调用代码):

'In the calling app split the exit code back into the original values 
    Dim arg1 As Int16 
    Dim arg2 As Int16 
    ExtractValues(exitCode, arg1, arg2) 

    Debug.WriteLine(arg1.ToString + "; " + arg2.ToString) 'Output: 100; 275 
+0

其实我的要求是...我有一个网站用于具有两个3文本框TextBox1的= 100 = TextBox2中一个275and按钮时,点击该按钮上的两个值传递给控制台应用程序作为CMDLINE arg.And控制台应用程序借此两个值在主函数中进行计算并将返回的结果返回给Web应用程序,然后Web应用程序将显示结果为msgbox。这是我的需要。 – Arun

+0

然后结合我的答案和@varocarbas给出的答案 - 那就是你的解决方案。 –

相关问题