ti-enxame.com

Como passar vários argumentos no processStartInfo?

Eu quero executar algum comando cmd a partir de c#code. Segui alguns blogs e tutoriais e obtive a resposta, mas estou um pouco confuso, ou seja, como devo passar vários argumentos?

Eu uso o seguinte código:

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 = 
...

Qual será o valor startInfo.Arguments para o seguinte código de linha de comando?

  • 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

31
Amit Pal

É puramente uma string:

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

Obviamente, quando argumentos contiverem espaços em branco, você terá que escapar deles usando\"\", como:

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

Veja MSDN para isso.

44
bash.d
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"

use/c como um argumento cmd para fechar o cmd.exe quando terminar de processar seus comandos

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

e...

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

O /c diz ao cmd para sair assim que o comando for concluído. Tudo após /c é o comando que você deseja executar (dentro de cmd), incluindo todos os argumentos.

1
sparky68967

Para makecert, seu startInfo.FileName deve ser o caminho completo do makecert (ou apenas makecert.exe, se estiver no caminho padrão), então o Arguments seria -sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer agora não estou familiarizado com como o armazenamento de certificados funciona, mas talvez você precise definir startInfo.WorkingDirectory se estiver consultando os arquivos .cer fora do armazenamento de certificados

0
Martheen