2013-02-25 6 views
24

Я хочу запустить команду cmd от c#. Я следил за некоторыми блогами и учебным пособием и получил ответ, но я немного путаюсь. I.e Как мне передать несколько аргументов?Как передать множители аргументов в processStartInfo?

Я использую последующий код:

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; 
startInfo.FileName = "cmd.exe"; 
startInfo.Arguments = 
... 

Что будет значение startInfo.Arguments для следующего кода командной строки?

  • makecert -sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer

  • netsh http add sslcert ipport=127.0.0.1:8085 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} clientcertnegotiation=enable

ответ

32

Это чисто строка:

startInfo.Arguments = "-sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer" 

Конечно, когда аргументы содержат пробелы, вам придется их избежать с помощью \ "\", например:

"... -ss \"My MyAdHocTestCert.cer\"" 

См. MSDN для этого.

+0

И если мне нужно выполнить их, используя | символ, как в этой команде? netstat -ano | find/i "listen" | find/i "17328" – Revious

+0

Мое предположение заключалось в том, чтобы избежать «с помощью», сделать снимок. –

+0

Возможно, я не понимаю этого ответа, но ваш код, кажется, добавляет только одну инструкцию, первую, о которой упомянул OP. Как они могли добавить свою вторую инструкцию с тем же startInfo? – ThePartyTurtle

0

Для MakeCert, ваш startInfo.FileName должен быть полный путь к MakeCert (или просто Makecert.exe, если он находится в стандартном пути), то Arguments будет -sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer теперь я немного не знаком с тем, как хранить произведения сертификатов, но, возможно, вы» должны будете установить startInfo.WorkingDirectory, если вы имеете в виду файлы .CER вне хранилища сертификатов

4
System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; 
startInfo.FileName = "cmd.exe"; 
startInfo.Arguments = @"/c -sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer" 

использования/с в качестве аргумента CMD, чтобы закрыть cmd.exe как только его закончить обработку ваших команд

1
startInfo.Arguments = "/c \"netsh http add sslcert ipport=127.0.0.1:8085 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} clientcertnegotiation=enable\""; 

и ...

startInfo.Arguments = "/c \"makecert -sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer\""; 

The /c рассказывает CMD, чтобы выйти после того, как команда была выполнена. Все после /c - это команда, которую вы хотите запустить (в пределах cmd), включая все аргументы.

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

  • Нет связанных вопросов^_^