2012-06-20 4 views
1

Мне нужно получить доступ к командной строке из приложения C#. Я не могу найти способ обнаружить несогласованные двойные кавычки, если я использую параметр «args».Доступ к командной строке с использованием C#

Приложение, в котором я работаю в данный момент, имеет возможность шифровать строку, которую вы передаете ей через командную строку.

например.

program.exe -encrypt somestring 

Результаты в:

EZs/6rWxvJ82+VE8unJ0Xw== 

Теперь, если пользователь в этом:

program.exe -encrypt somestring extra characters 

он игнорирует все после того, как "SomeString" (вы все еще можете получить доступ к остальным значениям через параметр «args»).

Вы можете обойти это легко с помощью двойных кавычек:

program.exe -encrypt "somestring extra characters" 

И, конечно, если вы хотите использовать встроенные кавычки вы можете избежать их «\»:

program.exe -encrypt "somestring \"extra\" characters" 

Проблема возникает, когда пользователь вводит что-то вроде этого:

program.exe -encrypt "somestring extra characters 

или:

program.exe -encrypt somestring ex"tra characters 

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

ответ

6

Вот как передает командную строку в вашу программу C#. Вы не можете это изменить. Однако вы можете получить доступ к строкам аргументов команды в целом и выполнить проверку самостоятельно.

MSDN: Environment.CommandLine Property

+0

+1 пришел сюда, чтобы опубликовать аналогичное решение – Habib

0

Просто сделайте это вручную: убедитесь, что у вас есть только один аргумент после аргумента -encrypt, и если нет, то следующий аргумент начинается с двойных кавычек, а последний аргумент заканчивается двойными кавычками. Если ни одно из них не приведет к пользовательской ошибке пользователя.

Когда следующий аргумент после -encrypt начинается с двойных кавычек, а последний аргумент заканчивается двойными кавычками, стройте строку самостоятельно, используя Array.Copy или что-то в этом роде.

+0

Проблема заключается в том, что цитата получает полностью игнорируется. то есть. Он не отображается как часть значения в параметре «args». – ilitirit

+0

Я вижу, извините за то, что не проверил это сам. Вы можете просто взять все аргументы после '-encrypt' и присоединиться к ним как строку, сообщая, что пользователь' -encrypt' должен прийти последним, если у вас есть больше аргументов для поддержки. –

Смежные вопросы