私のjar(コンソールにtrueまたはfalseのいずれかに出力する)をC#から実行して読み込むコードがオンラインで見つかりました。開発マシンで次のコードが正常に動作しますコンソールからC#でjarストリームを読む
private bool hasInformation(String value)
{
try
{
using (Process p = new Process())
{
p.StartInfo = new ProcessStartInfo("java", @" -jar myJarName.jar " + value);
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.Start();
String availableOrNot = p.StandardOutput.ReadToEnd();
p.WaitForExit();
//Trace.WriteLine("data = " + s);
availableOrNot = availableOrNot.Trim();
if (availableOrNot.Equals("true"))
{
return true;
}
return false;
}
}
catch (Exception e)
{
LogWriter.writeToLogFile(e);
}
return false;
}
私のテストマシンでは、コードは実行前に例外をスローするような空の文字列を返します。
jarファイルが手動で実行され、例外がスローされていないときに、jarファイルがコマンドラインウィンドウでうまく動作するため、何を確認するかわかりません(少なくともキャッチされません)。すべてのことが起こるのは、空の文字列が得られるということです。私の開発マシンでは、真または偽の答えが得られます。
誰かが間違っている可能性があることを知っている人がいるかもしれないので、私は本当に立ち往生しているように調査することができます。
おかげ
編集:私は、ストリームからそれを読み取ることができ、エラーメッセージをリダイレクトした後、私はアクセス
できないエラーを取得するjarファイルmyJarName.jar \ rを\ n」は
おそらく、テストマシンでコードを別々に実行していますか?例えば。おそらくあなたの開発マシンのWindowsアプリケーションとは対照的に、ASP.Netアプリケーションから呼び出すでしょうか?ユーザー特権の違い(手動テストを行うときとコードを実行するときに同じユーザーの下で実行されるコード) –
コードは同じユーザーで実行されていますが、設定が少し異なります。プロセスの産卵はブロックされますか? – rik
まあ、間違いなく、問題の原因となっているセットアップでいくつかの違いがあるようです。正確な詳細を知らなければ、推測するのは難しいので、私はあなたにそれらの線に沿って考えるように努力しています。コードレベルのデバッグが役に立たない場合は、SysInternalsスイートを入手し、Process Monitor/Process Explorerを使用して、これらの呼び出しが行われたときにOSレベルで実際に何が起こるかを確認することをお勧めします。 Javaアプリケーションが起動していますか? –