jar ファイルを呼び出す ac シャープ プログラムを作成しようとしています。
この種の質問について多くの解決策を探しましたが、わかりません。
これが私の状況です。実際にjarファイルを呼び出す前に、テストのために java -version を呼び出してみました。
これは引数cmdでコマンドラインを実行するメソッドです
public static string StartCmdProcess(string[] cmd)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.AutoFlush = true;
for (int i = 0; i < cmd.Length; i++)
{
p.StandardInput.WriteLine(cmd[i].ToString());
}
p.StandardInput.WriteLine("exit");
string strRst = p.StandardOutput.ReadToEnd();
p.WaitForExit();
p.Close();
return strRst;
}
そして私の主な方法で
電話する
string result = StartCmdProcess(new string[] { "java -version" });
Console.WriteLine(result);
「Java」を呼び出すと、正常に動作し、印刷されるはずのすべてが出力されます。
しかし、 java -version のように引数を入れると、うまくいきません。
この問題の何が問題なのか知っている人はいますか?
誰かが助けてくれれば大歓迎です:)
EDITED:呼び出しの結果は、実際には StandardOutput ではなく StandardError になりますが、それはかなり配線されています。誰でも理由を知っていますか?
public static string StartCmdProcess(string[] cmd)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.AutoFlush = true;
for (int i = 0; i < cmd.Length; i++)
{
p.StandardInput.WriteLine(cmd[i].ToString());
}
p.StandardInput.WriteLine("exit");
strRst.Append(p.StandardOutput.ReadToEnd()).Append(p.StandardError.ReadToEnd());
p.WaitForExit();
p.Close();
return strRst.ToString();
}