Process.Start不传递参数

时间:2012-08-01 21:36:48

标签: vb.net command-line-arguments process.start

我有一个bat文件,运行以下完全正常:

Bec.exe --f=Config.cfg

现在在vb.net中我有一个按钮,它使用相同的参数启动相同的exe,并输出到rtb。但是由于某些原因它不会传递参数,我不知道为什么。有人可以帮忙吗?

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim cmdProcess As Process
    cmdProcess = New Process()
    cmdProcess.StartInfo.FileName = """" & TextBox2.Text & """" 'normally this is C:\ServerTools\Bec.exe
    cmdProcess.StartInfo.Arguments = """" & TextBox1.Text & """" 'normally is --f=Config.cfg
    cmdProcess.StartInfo.RedirectStandardOutput = True
    cmdProcess.StartInfo.UseShellExecute = False

    If cmdProcess.Start() Then
        RichTextBox2.Text = cmdProcess.StandardOutput.ReadToEnd
    Else
        ' Failed to execute
    End If
End Sub

此外,我将提供对.exe的接受选项的引用我正在开始

Options:
-h, --help            show this help message and exit
-f FILENAME, --file=FILENAME

4 个答案:

答案 0 :(得分:1)

尝试使用ProcessStartInfo.WorkingDirectory属性。

答案 1 :(得分:0)

我总是通过创建一个单独的ProcessStartInfo对象并将其传递到Process.Start()方法来完成此操作。

ProcessStartInfo psi = new ProcessStartInfo("filename.txt", "-arg1 -arg2");
Process.Start(psi);

答案 2 :(得分:0)

你不应该引用参数,也不应该引用exe路径

cmdProcess.StartInfo.FileName = TextBox2.Text
cmdProcess.StartInfo.Arguments = TextBox1.Text

答案 3 :(得分:0)

我遇到了一个解决方案,显然我必须在与我执行的exe相同的目录中运行我的程序。 -f Config.cfg参数通常基于Bec.exe所在的位置,当我通过我的程序调用它时,它基于我的程序位置,所以现在我的程序在同一个目录中它现在正在运作。