Коротка версія:
Чи досить обернути аргумент у лапки та уникнути \
і "
?
Кодова версія
Я хочу передати аргументи командного рядка 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"
Відповідно до цієї відповіді я створив таку функцію, щоб уникнути єдиного аргументу, але я міг щось пропустити.
private static string EscapeCommandLineArguments(string[] args)
{
string arguments = "";
foreach (string arg in args)
{
arguments += " \"" +
arg.Replace ("\\", "\\\\").Replace("\"", "\\\"") +
"\"";
}
return arguments;
}
Це достатньо добре чи для цього існує якась рамкова функція?