Using C#, I am trying to pass command-line arguments to a new process using Process.Start():
string path = @"C:\Demo\Demo.exe";
string arguments = "one two three";
ProcessStartInfo startInfo = new ProcessStartInfo
   {
      FileName = path,
      Arguments = arguments
   };
var process = Process.Start(startInfo);
My C application Demo.exe just echos the command line arguments:
int main( int argc, char *argv[] )
{
   int count=0;
   // Display each command-line argument.
    printf( "\nCommand-line arguments:\n" );
    for( count = 0; count < argc; count++ )
        printf( "  argv[%d]   %s\n", count, argv[count] );
    while(1);
}
If I start my application from cmd.exe, I get reasonable output:
Command-line arguments:
 argv[0]   Demo.exe
 argv[1]   one
 argv[2]   two
 argv[3]   three
When I use the C# application, the only thing I get is the path argument at argv[0]:
Command-line arguments:
  argv[0]   C:
Task Manager shows command line arguments for each method of starting Demo.exe:

Why isn't my C application receiving the command-line arguments from the C# application?
Edit @hvd suggested I use GetCommandLine(). Here is the code and result of that:
char* ar = GetCommandLine();
printf( "\nGetCommandLine arguments:\n" );
printf("  %s", ar);
Output:
GetCommandLine arguments:
  "C:
Is it possible that the C app is receiving the args as one string, but ignores everything after the first \ in the path?
Edit: I've added an answer below. It is a workaround, but I'm not sure the cause of my issue.
 
     
     
     
    