Как передать несколько аргументов в processStartInfo?

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

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

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


person Amit Pal    schedule 25.02.2013    source источник


Ответы (5)


Это просто строка:

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. для этого.

person bash.d    schedule 25.02.2013
comment
И если мне нужно выполнить их, используя | как в этой команде? netstat -ano | найти / я слушаю | найти / я 17328 - person Revious; 06.03.2015
comment
Мое предположение состояло бы в том, чтобы избежать с помощью \, попробуйте. - person bash.d; 09.03.2015
comment
Может быть, я не понимаю этот ответ, но ваш код, кажется, добавляет только одну инструкцию, первую, которую упомянул OP. Как они могли добавить свою вторую инструкцию с той же самой startInfo? - person ThePartyTurtle; 01.07.2016

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"

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

person Zaid Amir    schedule 25.02.2013

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\"";

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

person sparky68967    schedule 25.02.2013

Не забудьте включить System.Diagnostics

ProcessStartInfo startInfo = new ProcessStartInfo("myfile.exe");        // exe file
startInfo.WorkingDirectory = @"C:\..\MyFile\bin\Debug\netcoreapp3.1\"; // exe folder

//here you add your arguments
startInfo.ArgumentList.Add("arg0");       // First argument          
startInfo.ArgumentList.Add("arg2");       // second argument
startInfo.ArgumentList.Add("arg3");       // third argument
Process.Start(startInfo);                 
person Haold Marmolejos    schedule 09.10.2020
comment
Для аргументов, разделенных пробелами, или пар имя/значение это лучший ответ. Однако здесь есть оговорка. Если вам нужен аргумент типа: --arg1="value1". Это будет экранировано и не будет работать должным образом. - person CodeAngry; 04.06.2021

Для 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 вне хранилища сертификатов

person Martheen    schedule 25.02.2013