Используя С#, я пытаюсь передать аргументы командной строки новому процессу с помощью 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);
Мое приложение C Demo.exe просто перефразирует аргументы командной строки:
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);
}
Если я запускаю свое приложение из cmd.exe, я получаю разумный вывод:
Command-line arguments:
argv[0] Demo.exe
argv[1] one
argv[2] two
argv[3] three
Когда я использую приложение С#, единственное, что я получаю, это аргумент path в argv [0]:
Command-line arguments:
argv[0] C:
Диспетчер задач показывает аргументы командной строки для каждого метода запуска Demo.exe:
Почему приложение C не получает аргументы командной строки из приложения С#?
Edit @hvd предложил использовать GetCommandLine(). Вот код и результат:
char* ar = GetCommandLine();
printf( "\nGetCommandLine arguments:\n" );
printf(" %s", ar);
Вывод:
GetCommandLine arguments:
"C:
Возможно ли, что приложение C получает аргументы как одну строку, но игнорирует все после первого\в пути?
Изменить: я добавил ответ ниже. Это обходной путь, но я не уверен в причине моей проблемы.