Search code examples
vb.netparametersprocess.start

Process.Start arguments not working


I am trying to start a process with two parameters that will run from a cmd prompt window just fine. The problem comes when I try to launch it via process.start.

In the cmd window, it looks like this.

D:\Projects\MyProg.exe "D:\Projects\MyScript.txt" "D:\Projects\MyInputData.txt"

When I try to build the arguments in .NET it puts double quotes around the entire string and it looks like this. The program doesn't interpret it as two parameters and just stops. If I add double quotes around each argument it still misinterprets it.

I know it is the MyProg.exe issue (vendor program that I can't change) but is there a way to send this command so it will work?

myProcess.StartInfo.Arguments = "D:\Projects\MyScript.txt D:\Projects\MyInputData.txt"

When I add double quotes it sort of works, the program starts but then has a problem and just stops.

myProcess.StartInfo.Arguments = """D:\Projects\MyScript.txt"" ""D:\Projects\MyInputData.txt"""

Solution

  • I'm not quite sure what D:\Projects\MyProg.exe is doing but following sample is working for. Two variable strings are declared. The two strings indicate two argument parameters I want to use with the executable.

    Public Class Form1
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
        '// Set first file parameter to the executable
        Dim sourceFileName As String = "source.txt"
        '// Set second file parameter to the executable
        Dim targetFileName As String = "target.txt"
    
        '// Create a new ProcessStartInfo
        Dim p As New ProcessStartInfo
    
        '// Specify the location of the binary
        p.FileName = "D:\_working\ConsoleApplication3.exe"
    
        '// Use these arguments for the process
        p.Arguments = " """ & sourceFileName & """ """ & targetFileName & """ -optionalPara"
    
        ' Use a hidden window
        'p.WindowStyle = ProcessWindowStyle.Hidden
    
        ' Start the process
        Process.Start(p)
    
      End Sub
    End Class
    

    See resulting screenshot:

    enter image description here