Экранировать аргументы командной строки в C #

Краткая версия:

Достаточно ли заключить аргумент в кавычки и экранировать \ и «?

Версия кода

Я хочу передать аргументы командной строки string [] args другому процессу с помощью ProcessInfo.Arguments.

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = Application.ExecutablePath;
info.UseShellExecute = true;
info.Verb = "runas"; // Provides Run as Administrator
info.Arguments = EscapeCommandLineArguments(args);
Process.Start(info);

Проблема в том, что я получаю аргументы в виде массива и должен объединить их в одну строку. Аргументы могут быть создана, чтобы обмануть мою программу.

my.exe "C:\Documents and Settings\MyPath \" --kill-all-humans \" except fry"

Согласно этот ответ Я создал следующую функцию, чтобы избежать одного аргумента, но я мог что-то пропустить. Я хочу добавить несколько тестов производительности к ...

В нашем приложении Python (классная веб-служба) есть полный набор тестов (модульные тесты, интеграционные тесты и т. Д.), Которые все разработчики должны запустить перед фиксацией кода.
Я хочу добавить в пакет несколько тестов производительности, чтобы убедиться, что никто не добавляет код, который заставляет нас работать слишком медленно (для довольно произвольного определения медленного).
Очевидно, я могу собрать некоторые функции в тест, рассчитать его время и сравнить с некоторым предопределенным порогом.

Сложные требования:

  1. Я хочу, чтобы каждый разработчик имел возможность протестировать код на своей машине (зависит от мощности процессора, ОС (! Linux и некоторые Windows) и внешние конфигурации - версия Python, библиотеки и модули совпадают). Тестовый сервер, хотя, как правило, неплохая идея, не решает эту проблему.
  2. Я хочу, чтобы тест был ДЕТЕРМИНИСТИЧЕСКИ - независимо от того, что происходит на машине, выполняющей тесты, мне нужно несколько запусков test, чтобы получить те же результаты.

Мои предварительные мысли:

  • Используйте timeit и выполняйте тест системы каждый раз, когда я запускаю тесты. Сравните результаты теста производительности с эталонным тестом.
  • Используйте cProfile, чтобы настроить интерпретатор на игнорирование "внешнего шума". Я' Я пока не уверен, что умею читать структуру pstats , но уверен, что это выполнимо.

Другие мысли?

Спасибо!

Тал.

16
задан Tal Weiss 1 April 2011 в 07:29
поделиться