2013-02-25 42 views
24

Tôi muốn chạy một số lệnh cmd từ mã c#. Tôi theo dõi một số blog và hướng dẫn và nhận được câu trả lời, nhưng tôi đang ở trong sự nhầm lẫn chút i.e Làm thế nào tôi nên vượt qua nhiều đối số?Làm cách nào để vượt qua các đối số bội số trong processStartInfo?

tôi sử dụng mã sau:

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

gì sẽ là giá trị startInfo.Arguments cho mã dòng lệnh sau đây?

  • 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

Trả lời

32

Nó hoàn toàn là một chuỗi:

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

Tất nhiên, khi lập luận chứa khoảng trắng bạn sẽ phải thoát khỏi chúng bằng cách sử \ "\", như:

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

Xem MSDN cho việc này.

+0

Và nếu tôi cần thực thi chúng bằng cách sử dụng | biểu tượng như trong lệnh này? netstat -ano | find/i "listen" | find/i "17328" – Revious

+0

Đoán của tôi sẽ là để thoát khỏi "bằng cách sử dụng \", cho nó một shot. –

+0

Có lẽ tôi không hiểu câu trả lời này, nhưng mã của bạn dường như chỉ thêm một hướng dẫn, đầu tiên mà OP đã đề cập. Làm thế nào họ có thể thêm hướng dẫn thứ hai của họ với cùng một startInfo? – ThePartyTurtle

0

Đối với makecert, startInfo.FileName của bạn nên được đường dẫn đầy đủ của makecert (hoặc chỉ cần makecert.exe nếu đó là trong con đường tiêu chuẩn) thì Arguments sẽ -sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer bây giờ tôi chút không quen với giấy chứng nhận công trình cửa hàng như thế nào, nhưng có lẽ bạn' sẽ cần phải thiết lập startInfo.WorkingDirectory nếu bạn đang đề cập các tập tin cer bên ngoài các cửa hàng giấy chứng nhận

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" 

sử dụng/c như một đối số cmd để đóng cmd.exe một lần kết thúc của nó chế biến lệnh của bạn

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

và ...

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 yêu cầu cmd thoát khi lệnh đã hoàn tất. Mọi thứ sau /c là lệnh bạn muốn chạy (trong phạm vi cmd), bao gồm tất cả các đối số.

Các vấn đề liên quan