2013-02-25 13 views
24

Chcę uruchomić polecenie cmd z kodu c#. Podążyłem za kilkoma blogami i tutorialem i otrzymałem odpowiedź, ale jestem trochę zmieszany. Jak mam przekazywać wiele argumentów?Jak przekazywać argumenty wielokrotności w processStartInfo?

używam kod następująco:

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

Jaka będzie wartość startInfo.Arguments dla następnego polecenia linii kodu?

  • 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

Odpowiedz

32

Jest czysto ciąg:

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

Oczywiście, gdy argumenty zawierać spacji będziesz musiał uciec je za pomocą \ "\", np .:

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

Zobacz w tym celu: MSDN.

+0

I jeśli muszę wykonać je za pomocą | symbol jak w tym poleceniu? netstat -ano | find/i "listening" | znajdź/i "17328" – Revious

+0

Domyślam się, że chciałbym uciec przed "użyciem \", dać mu szansę. –

+0

Może nie rozumiem tej odpowiedzi, ale twój kod wydaje się dodawać tylko jedną instrukcję, pierwszą, o której wspomniał OP. W jaki sposób mogli dodać swoją drugą instrukcję z tym samym startInfo? – ThePartyTurtle

0

Dla MakeCert, twój startInfo.FileName powinna być pełna ścieżka MakeCert (lub po prostu makecert.exe czy to w standardowej ścieżce) wtedy Arguments byłoby -sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer teraz jestem nieco zaznajomieni z jak działa magazynu certyfikatów, ale może ty” będziesz musiał ustawić startInfo.WorkingDirectory jeśli masz na myśli pliki cer zewnątrz magazynu certyfikatów

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" 

use/c jako argumentu cmd, aby zamknąć cmd.exe raz przetwarzanie jego wykończenie poleceń

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

i ...

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 opowiada cmd, aby zamknąć raz komenda została zakończona. Wszystko po /c jest poleceniem, które chcesz uruchomić (w ramach cmd), włączając wszystkie argumenty.

Powiązane problemy