I'm trying to run a cmd line application from c# using Process.Start(ProcessStartInfo);
The problem is, the cmd line application is a matlab standalone .exe and has optional arguments meaning that you pass them on the cmd line as such:
app.exe "optional1" optional1value "optional2" optional2value
Where optional1value is a integer or string etc.
The problem we're having is that the double quotes aren't being passed as part of the "optional1" argument and so I believe cmd.exe is getting something like:
app.exe optional1 optional1value optional2 optional2value
or something like that, which matlab's parser obviously gets confused by.
I have tried:
@"""optional1"" optional1value ""optional2" optional2value"""
as suggested by some in other SO questions regarding double quotes in cmd line arguments but it doesn't seem to be working for me, nor does:
"\"optional1\" optional1value \"optional2\" optional2value\""
I have written a small c# command line .exe to print out the arguments it gets. If I put the command line arguments in VS Project->Debug area and run it then it prints them with double quotes but because of all the escaping etc. when I do this in code, the .exe prints the arguments without any double quotes.
I found this article about it maybe being a bug in .NET 3.5's cmd parser but can't seem to find a viable solution.
Does anyone have any ideas?
Thank you for your time,
Poncho
P.S. Is there a way to see what cmd.exe gets when sending arguments over with Process.Start()? I have my Process opening a cmd window but it would be nice to see the line cmd.exe gets such as: "app.exe optional1 optional1value" etc.
Thanks again.
Quotes in ProcessStartInfo.Arguments
must be escaped as three quotes ("""
). This is because a single quote is used for passing a string containing spaces as a single argument.
See the documentation here.
var psi = new ProcessStartInfo(
"cmd_app.exe",
"\"\"\"optional1\"\"\" optional1value \"\"\"optional2\"\"\" optional2value");
Process.Start(psi);
All cmd_app.exe does is announce its # of args and what the args are, with this input it displays:
"optional1"
optional1value
"optional2"
optional2value