2016-03-23 11 views
0

をエスケープし、引用符を必要とします。引数は、常に私は、コマンドプロンプトで次のコマンドを実行した場合、それが動作

 ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     startInfo.FileName = "cmd.exe"; 
     startInfo.Arguments = @"/c ""C:\Program Files (x86)\AppFolder\do.exe"""; 

     using (Process process = Process.Start(startInfo)) 
     { 
      ... 
     } 

"C:\Program Files (x86)\AppFolder\do.exe" 

私は、プロセスと同じことを実行しようとします

実行されていません。 startInfo.Argumentsを見ると、次のようになります。

/c \"C:\\Program Files (x86)\\AppFolder\\do.exe\" 

私は何が欠けていますか?引用符やスペースのある引数を渡すことはできませんか?スペース/引用符で項目を渡している例がたくさんありますが、それに従うだけではうまくいきません。これは私が考えることができる最も狭い例です。

編集:私はそれが動作しますが、スペースや引用符を使用していないので、私はただのショートカットを作成する場合:

startInfo.Arguments = @"/c D:\_test\Do.lnk"; 
+1

_実行されていません。どのように実行されていませんか?隠しウィンドウスタイルを削除し、 '/ c'オプションを'/k'オプションに変更してみてください。私はコンソールウィンドウにエラーメッセージが表示されるようになりました。 –

答えて

1

私が使用していません「@」。これは正しい実装です:

startInfo.Arguments = "/c \"C:\\Program Files (x86)\\AppFolder\\do.exe\""; 
+0

' "/ C \" C:\\プログラムファイル(x86の)\\ AppFolder \\ do.exe \ ""' '@とまったく同じ文字列である"/C "" C:\プログラムファイル(x86の)\ AppFolder \ do.exe "" "を実行します。バックスラッシュと引用符からどのようにエスケープしても、違いはありません。 –

関連する問題