Вас ждут несколько ловушек.
Во-первых, как вы уже обнаружили, обратная косая черта в именах путей вызывает проблемы в строках, поскольку они также могут указывать на escape-последовательности C#. Обычно хорошей практикой является использование синтаксиса C# @"..."
для имен файлов, отчасти для того, чтобы избежать необходимости удваивать обратную косую черту и облегчить чтение, а отчасти потому, что вы можете непреднамеренно оставить там \t
, и это останется незамеченным целую вечность.
Во-вторых, вызов Process.Start
с одним параметром принимает только команду — он не может принимать аргументы команды — поэтому вам нужно вызвать перегрузку с двумя параметрами.
В-третьих, кавычки вокруг значения аргумента records
нуждаются в обработке, чтобы синтаксис C# знал, что вы хотите от них, т.е. чтобы передать их команде. Я разделил аргументы команды на две части, чтобы было понятнее. Я решил использовать обратную косую черту, чтобы избежать их, хотя использование альтернативы @"...""..."
было бы столь же хорошо, и выбор в значительной степени зависит от личных предпочтений, если только контекст не указывает вам явно в одну сторону, а не в другую.
string cmd = @"C:\Program Files\GoToTags\GoToTags Encoder\GoToTags.Encoder.exe";
string url = "http://petshop.intato.com/index.php?id=" + TxtBoxIDCode.Text;
string cmdArgs = "--records \"{'Url':'" + url + "','RecordType':'Website'}\"";
Process.Start(cmd, cmdArgs);
[отредактировано для добавления:]
Если по какой-то причине вы обнаружите, что хотите или нуждаетесь в использовании string.Format
для создания своего cmdArgs
, вас ждет четвертая ошибка: string.Format
ищет фигурные скобки ({
и }
) для разграничения спецификаций параметров вставки, но ваш аргумент командной строки records
требует фигурных скобок в строке. Чтобы добиться этого, нужно удвоить фигурные скобки, которые вы хотите, например так:
string cmdArgs =
string.Format("--records \"{{'Url':'{0}','RecordType':'Website'}}\", url)";
person
ClickRick
schedule
24.05.2014