Проблемы командной строки .Net - PullRequest
1 голос
/ 17 июня 2011

У меня есть приложение командной строки .net / c #, которое принимает несколько параметров в следующем формате:

some.exe -p1: значение -p2: someothervalue

и т. Д.

Полный пример вызова выглядит следующим образом:

JobWorker.exe -j:b38815af-68ce-4cb9-a858-3c016cc3c033 -cs:fors37ca -ch:384 
-s:fors37ea -dp:667 -op:B:\ 
-ci:"d:\TFS\iRMA-4.2-P1\Applications.JobExecutor\bin\x86\Debug\Image Cache\" 
-cas:fors35fa -cap:333 -gs:fors395a -gb:gibraltar -gt:5 
-jn:"DocumentJob #iRMA FSP #Some User Name #Open #6/16/2011"

По какой-то причине разрывается часть -ci: "d: ...."Строка [] выглядит странно, смотрите с -ci: one:

full command line including the -ci: part

против: command line without the -ci: part

Все, что за -ci: partзапутался .. по какой-то причине, и мне интересно, что это?Есть идеи?

Ответы [ 3 ]

0 голосов
/ 17 июня 2011

За msdn

Двойная кавычка, которой предшествует обратная косая черта (\ "), интерпретируется как буквальный символ двойной кавычки (")

http://msdn.microsoft.com/en-us/library/78f4aasd(v=vs.80).aspx

Он воспринимает это как литерал и не закрывает аргумент.

0 голосов
/ 17 июня 2011

У вас очень сложная командная строка, которая принимает много аргументов, и, вероятно, она генерируется программно (в любом случае, я надеюсь, что это так). Поскольку она сложна и вам нужно разрешить проблемные символы, я бы предложил передать один,закодированный в base64 блок в качестве аргумента, который содержит всю информацию о параметре.Это своего рода сериализатор для бедняков, но он защищает вашу команду от множества странностей, возникающих при передаче аргументов через командную строку и дюжины специальных символов, таких как трубы и угловые скобки: |<> и несколько других.Вы можете декодировать и разобрать блок base64 внутри вашей логики, не заботясь о специальных символов

1002 * Так с base64, кодирующие вашу команду будет выглядеть так:.

JobWorker.exe LWo6YjM4ODE1YWYtNjhjZS00Y2I5LWE4NTgtM2MwMTZjYzNjMDMzIC1jczpmb3JzMzdjYSAtY2g6Mzg0IA0KLXM6Zm9yczM3ZWEgLWRwOjY2NyAtb3A6QjpcIA0KLWNpOiJkOlxURlNcaVJNQS00LjItUDFcQXBwbGljYXRpb25zLkpvYkV4ZWN1dG9yXGJpblx4ODZcRGVidWdcSW1hZ2UgQ2FjaGVcIiANCi1jYXM6Zm9yczM1ZmEgLWNhcDozMzMgLWdzOmZvcnMzOTVhIC1nYjpnaWJyYWx0YXIgLWd0OjUgDQotam46IkRvY3VtZW50Sm9iICNpUk1BIEZTUCAjU29tZSBVc2VyIE5hbWUgI09wZW4gIzYvMTYvMjAxMSI =

Вы можете проверить en / decoding здесь и во многих других онлайн-локациях.

0 голосов
/ 17 июня 2011

Я думаю, что liho1eye имеет это право в комментарии.

Это действительно не имеет ничего общего с .NET и больше связано с тем, какой метод вы используете для передачи аргументов в вашу программу.

Запускаете ли вы его из оболочки CMD.exe?

Исправление заключается в том, чтобы либо избавиться от конечной обратной косой черты, либо удвоить ее, например:

-ci:"d:\TFS\iRMA-4.2-P1\Applications.JobExecutor\bin\x86\Debug\Image Cache\\" 
...