[Mono-devel-list] Arguments with spaces when startingexternalprogram through System.Diagnostics.Process

Jonathan Gilbert 2a5gjx302 at sneakemail.com
Thu May 26 18:56:17 EDT 2005


At 06:16 PM 26/05/2005 -0400, Gonzalo wrote:
>On Thu, 2005-05-26 at 17:59 -0400, Jonathan Gilbert wrote:
>> At 05:53 PM 26/05/2005 -0400, Gonzalo wrote:
>> >You just need to use something like "'argument with spaces'" (note the
>> >single quotes around the argument).
>> 
>> I doubt single quotes will work across platforms, though. It would be much
>> better form to use double-quotes, which will be recognized on Windows and
>> presumably other .NET runtimes as well.
>
>I doubt that people that doubt without testing are right. In fact, this
>time I'm sure they are not right ;-).

You may have tried it yourself with mono on Windows, but I myself tried it
with Microsoft's implementation on Windows. Here is my test:

==========8<===== caller.cs =====8<==========
using System;
using System.Diagnostics;

class MainClass
{
  static void Main()
  {
    ProcessStartInfo start_info = new ProcessStartInfo();

    start_info.FileName = "dummy.exe";
    start_info.Arguments = "\"hello world\" 'hello world' `hello world`
hello world";

    Process.Start(start_info);
  }
}
==========8<===== dummy.cs =====8<==========
using System;

class Dummy
{
  static void Main(string[] args)
  {
    Console.WriteLine("{");
    for (int i=0; i < args.Length; i++)
      Console.WriteLine("  {0}: \"{1}\"", i, args[i]);
    Console.WriteLine("}");
    Console.ReadLine();
  }
}
==========8<================8<==========

Invocation:

csc caller.cs
csc dummy.cs
caller.exe

Output:

{
  0: "hello world"
  1: "'hello"
  2: "world'"
  3: "`hello"
  4: "world`"
  5: "hello"
  6: "world"
}

As you can see, only the double quotes held up.

Cheers :-)
Jonathan Gilbert



More information about the Mono-devel-list mailing list