2016-10-19 10 views
2

私のコードからCMDを実行しようとしています。これは私が私のコマンドラインで実行するラインである、と私はそれを手動で実行したときにそれが動作します:C#コードのCMDコマンドが機能しない(Windows)

C:\Dev\MySite\web\Website\comparison-tool\data\ & node csvToJson.js 

は、これは私が私のコードで持っているものです。

string commandText = String.Format("/C {0}{1} & node csvToJson.js", root, csvToJsonFolder); 
Process.Start("CMD.exe", commandText); 

のCommandTextが/C C:\Dev\MySite\web\Website\comparison-tool\data\ & node csvToJson.js

に評価します

エラーなく実行されますが、何も起きていないようです。コマンドプロンプトが表示されないので、発生した可能性のあるエラーは表示されません。コマンドは特定のフォルダにファイルが書き込まれることになっています。手動でコマンドを実行するとファイルが書き込まれますが、コードを実行するとファイルが書き込まれません。

編集:私はこれに私のコードを変更:

Process process = new Process(); 
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.WindowStyle = ProcessWindowStyle.Normal; 
startInfo.FileName = "cmd.exe"; 
startInfo.Arguments = commandText; 
startInfo.RedirectStandardOutput = true; 
startInfo.UseShellExecute = false; 
process.StartInfo = startInfo; 
process.Start(); 

string result = process.StandardOutput.ReadToEnd(); 

結果はちょうど空の文字列です。エラーメッセージなどはありません。

+0

私はコマンドプロンプトが個々の入力として各スペース区切り文字列を取得すると思います。 – Media

+0

'ProcessStartInfo'を使って出力を' StreamReader'にリダイレクトするように指示することができます。そしてコンソールが言ったことを読むことができます。 [This CodeProject article](http://www.codeproject.com/Articles/25983/How-to-Execute-a-Command-in-C)には、最初のセクションの例があります。エラーが表示される場合は、さらにデバッグすることができます。 – Equalsk

+0

ProcessStartInfoを試してみてください。 2番目の答えはここのようにhttp://stackoverflow.com/a/1469790/2202391 – Daniil

答えて

0

問題は私のコマンドテキストにあり、私は "cd"を忘れていました。 "/ C cd C:\ Dev \ MySite \ web \ Website \ comparison-tool \ data \ &ノードcsvToJson.js"

+0

私はこれを書いたかっただけです。あなたのC#アプリケーションがドライブと異なるドライブから実行されても、 '/ C/DC:\ Dev \ MySite \ web \ Website \ comparison-tool \ data \&node.exe csvToJson.js' C:。 – Mofi

+0

私はすでにそれを追加しました!ありがとう! –

関連する問題