web-dev-qa-db-ja.com

processStartInfoで複数の引数を渡す方法は?

c#codeからcmdコマンドを実行したい。私はいくつかのブログとチュートリアルに従って回答を得ましたが、少し混乱しています。つまり、複数の引数をどのように渡す必要がありますか?

私は次のコードを使用します:

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

31
Amit Pal

それは純粋に文字列です:

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 [〜#〜] をご覧ください。

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"

/ cをcmd引数として使用して、コマンドの処理が終了したらcmd.exeを閉じます。

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

そして...

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内で)実行するコマンドです。

1
sparky68967

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ファイルを参照している場合

0
Martheen